Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
172 / 24 / 4
Регистрация: 18.01.2011
Сообщений: 359
1

Экономия памяти или борьба с точками. (что-то типа массива ссылок хотелось бы иметь)

31.01.2012, 12:07. Показов 1101. Ответов 10
Метки нет (Все метки)

У меня есть объект Point. И есть Объект Grup.
В объекте Grup я выделил динамически память под массив объектов типа Point.
Чтоб, как бы Группа точек содержала в себе эти самые точки.
Но проблема в том, что точки они как бы созданы отдельно от Grup.
Получается, что когда я создаю массив в Grup, то он создает объекты Point
и присваивает им уже реальные Point.
Вообще в этом нет смысла по моему, т.к. получается что я трачу лишнюю папять за зря.
Если есть уже точки то зачем создавать новые? Можно ли как-то создать массив объектов типа Point
в объекте Grup, чтоб он определял, например ссылок и на существующие объекты?
Ну...другими словами не создавать массив объектов а массив ссылок на объекты. Дабы память не тратить лишнюю.
Спасибо за помощь!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.01.2012, 12:07
Ответы с готовыми решениями:

Скорость или экономия памяти - что бы выбрали Вы?
...

Нужна компонента: что-то типа StringGrid, но значения ячеек должны иметь тип числа (float, double и т.д.)
Уважаемые дамы и господа! Если у кого-то есть, или кто-то знает где можно взять компоненту под...

Экономия памяти
Скажите, будет ли второй вариант кода занимать меньше памяти? 1ый вариант: float a; f(a); ...

Экономия памяти
Здравствуйте, уважаемые программисты! Как разместить информацию о числах из массива, используя...

__________________

Записывайтесь на профессиональные курсы C++ разработчиков
10
571 / 554 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
31.01.2012, 12:13 2
Да, так можно. Например
std::vector<Point*> point_array;
А как вы сейчас храните поинты, если не в массиве?
1
172 / 24 / 4
Регистрация: 18.01.2011
Сообщений: 359
31.01.2012, 12:26  [ТС] 3
ну у меня вот так:
C++
1
2
3
4
5
6
7
8
9
    TGrup() {
.
.
.
    MassivTo4Grup=new TTo4ka[KolEl];
    
    TTo4ka *MassivTo4Grup; //все точки группы.
 
    ~TGrup(){ delete[] MassivTo4Grup; }
Добавлено через 1 минуту
т.е. указатель на объект. ему я присваиваю новый массив точек и т.п.
в итоге когда проверяю на создание точек, у меня создается лишняя именно вот в группе.
0
Эксперт С++
5042 / 3103 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
31.01.2012, 12:28 4
Андрей2011, что-то не очень понятно...
0
172 / 24 / 4
Регистрация: 18.01.2011
Сообщений: 359
31.01.2012, 13:03  [ТС] 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class TGrup
{
 
 
public:
    TGrup() {
    FId =0,FGrup=0,FKolT=0,FKoefSlab=0,FNetT=0,FWrazT=0;
    KolEl=0;
    MassivTo4Grup=new TTo4ka[KolEl];
    };
 
    void SetKolT(const short &KolT)  //при добавлении т.
        {         //ф-я сама определит нужно ли увеличить подкачку памяти
            if (KolT>=KolEl)
            {
                 KolEl+=1;
                delete[] MassivTo4Grup; //удалим сущ. массив
                 MassivTo4Grup=new TTo4ka[KolEl]; //создадим новый
            }
            FKolT = KolT;
        }
    short GetKolT() {return FKolT; }
    short FId,FGrup,FKoefSlab,FNetT,FWrazT;
    bool FIsp,FYKraya;
    TTo4ka *MassivTo4Grup; //все точки группы.
 
    ~TGrup(){ delete[] MassivTo4Grup; }
private:
short FKolT, KolEl;
 
};
а так?

Добавлено через 26 минут
Хм. вообще при создании новой группы создается только лишь одна точка.
Видимо из за этого:
C++
1
TTo4ka *MassivTo4Grup;
тогда все не так уж и плохо.
0
Эксперт С++
5042 / 3103 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
31.01.2012, 13:17 6
Андрей2011, я вот упорно не могу понять, что вас беспокоит? Насколько я понял, вы хотите связать все группы одним общим набором точек. Но это логически неверно, если я правильно понимаю смысл группы.
1
4030 / 2320 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
31.01.2012, 13:41 7
Цитата Сообщение от silent_1991 Посмотреть сообщение
Андрей2011, я вот упорно не могу понять, что вас беспокоит? Насколько я понял, вы хотите связать все группы одним общим набором точек. Но это логически неверно, если я правильно понимаю смысл группы.
Да нет, автор вроде как пытается нарисовать обычную обертку для массива.
Цитата Сообщение от Андрей2011 Посмотреть сообщение
Хм. вообще при создании новой группы создается только лишь одна точка.
Видимо из за этого:
C++
1
TTo4ka *MassivTo4Grup;
Вообще, это создание указателя на объект класса TTo4ka, а никакой ни точки. Впоследствии вы используете его, как указатель на первый элемент массива. Так что все ваши растраты памяти - это указатель.

А вот функция ресайза массива SetKolT действительно более, чем странная. При выделении новой памяти под массив вся уже имеющаяся информация в нем уничтожается... вы, похоже, ничего хранить в нем и не собирались
1
172 / 24 / 4
Регистрация: 18.01.2011
Сообщений: 359
31.01.2012, 14:21  [ТС] 8
Ну вобщем получалась вот какая штука.
Я могу создать массив в который могу положить ссылки на объекты. делается это так:
C++
1
TTo4ka *MassivPoit[8];
но массив этот лимитирован а мне надо было иметь массив с варьируемым кол-вом элементов,
по этому я делал вот так:
C++
1
2
TTo4ka *MassivTo4Grup;
MassivTo4Grup=new TTo4ka[KolEl];
но уважаемый, I.M., подсказал попробовать вектор. И в результате я решил проблему хранения ссылок на объекты без создания самих объектов и в то же время с варьируемым кол-вом элементов!
Всем спасибо за помощь!
0
4030 / 2320 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
31.01.2012, 14:32 9
Цитата Сообщение от Андрей2011 Посмотреть сообщение
но уважаемый, I.M., подсказал попробовать вектор. И в результате я решил проблему хранения ссылок на объекты без создания самих объектов и в то же время с варьируемым кол-вом элементов!
Если вас действительно беспокоит выделение памяти, то советую разузнать про метод resize() класса vector.
1
Эксперт С++
5042 / 3103 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
31.01.2012, 15:07 10
Андрей2011, если так хотелось использовать не вектор, а выделенный вручную динамический массив, то что мешало создать массив указателей?
C++
1
Class **ptrarr = new Class *[ptrarr_size];
1
172 / 24 / 4
Регистрация: 18.01.2011
Сообщений: 359
31.01.2012, 18:59  [ТС] 11
блин. вот оно как можно было еще)) спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.01.2012, 18:59

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Экономия памяти
Доброго времени суток, не знаю как надо делать, вот и спросил, допустим есть игра, где шарик просто...

QDir и экономия памяти
Пишу программу под ARM. Вывожу в таблицу содержимое директории расположенной на Flash с помощью...

Экономия памяти и справочные таблицы
Всем привет! Я не так давно работаю в Access и никак не могу уяснить для себя вот какое дело:...

Экономия памяти при упаковке данных
Здравствуйте, уважаемые программисты! Есть такая задача: Задан упорядоченный целочисленный...

Объявление массивов и передача их по ссылке, экономия памяти
Это кусок спецификации: Не могу понять, почему оба примера выше эквивалентны сначала...

Может ли метод вложенного типа иметь доступ к private полям внешнего типа
A) Да, если метод вложенного типа имеет модификатор public B) Да, если вложенный тип имеет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.