Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Андрей2011
29 / 23 / 2
Регистрация: 18.01.2011
Сообщений: 359
31.01.2012, 12:07     Экономия памяти или борьба с точками. (что-то типа массива ссылок хотелось бы иметь) #1
У меня есть объект Point. И есть Объект Grup.
В объекте Grup я выделил динамически память под массив объектов типа Point.
Чтоб, как бы Группа точек содержала в себе эти самые точки.
Но проблема в том, что точки они как бы созданы отдельно от Grup.
Получается, что когда я создаю массив в Grup, то он создает объекты Point
и присваивает им уже реальные Point.
Вообще в этом нет смысла по моему, т.к. получается что я трачу лишнюю папять за зря.
Если есть уже точки то зачем создавать новые? Можно ли как-то создать массив объектов типа Point
в объекте Grup, чтоб он определял, например ссылок и на существующие объекты?
Ну...другими словами не создавать массив объектов а массив ссылок на объекты. Дабы память не тратить лишнюю.
Спасибо за помощь!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.01.2012, 12:07     Экономия памяти или борьба с точками. (что-то типа массива ссылок хотелось бы иметь)
Посмотрите здесь:

Забивка массива или конвертирования типа данных C++
Борьба с утечками памяти C++
Чтение из памяти стороннего процесса и запись в файл массива типа doouble C++
C++ Согласно заданию реализовать класс абстрактного типа данных (далее АТД) как динамический массив. Для этого определение класса должно иметь следующие
Борьба с поеданием памяти оператором new C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
31.01.2012, 12:13     Экономия памяти или борьба с точками. (что-то типа массива ссылок хотелось бы иметь) #2
Да, так можно. Например
std::vector<Point*> point_array;
А как вы сейчас храните поинты, если не в массиве?
Андрей2011
29 / 23 / 2
Регистрация: 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 минуту
т.е. указатель на объект. ему я присваиваю новый массив точек и т.п.
в итоге когда проверяю на создание точек, у меня создается лишняя именно вот в группе.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
31.01.2012, 12:28     Экономия памяти или борьба с точками. (что-то типа массива ссылок хотелось бы иметь) #4
Андрей2011, что-то не очень понятно...
Андрей2011
29 / 23 / 2
Регистрация: 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;
тогда все не так уж и плохо.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
31.01.2012, 13:17     Экономия памяти или борьба с точками. (что-то типа массива ссылок хотелось бы иметь) #6
Андрей2011, я вот упорно не могу понять, что вас беспокоит? Насколько я понял, вы хотите связать все группы одним общим набором точек. Но это логически неверно, если я правильно понимаю смысл группы.
BRcr
 Аватар для BRcr
4003 / 2292 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
31.01.2012, 13:41     Экономия памяти или борьба с точками. (что-то типа массива ссылок хотелось бы иметь) #7
Цитата Сообщение от silent_1991 Посмотреть сообщение
Андрей2011, я вот упорно не могу понять, что вас беспокоит? Насколько я понял, вы хотите связать все группы одним общим набором точек. Но это логически неверно, если я правильно понимаю смысл группы.
Да нет, автор вроде как пытается нарисовать обычную обертку для массива.
Цитата Сообщение от Андрей2011 Посмотреть сообщение
Хм. вообще при создании новой группы создается только лишь одна точка.
Видимо из за этого:
C++
1
TTo4ka *MassivTo4Grup;
Вообще, это создание указателя на объект класса TTo4ka, а никакой ни точки. Впоследствии вы используете его, как указатель на первый элемент массива. Так что все ваши растраты памяти - это указатель.

А вот функция ресайза массива SetKolT действительно более, чем странная. При выделении новой памяти под массив вся уже имеющаяся информация в нем уничтожается... вы, похоже, ничего хранить в нем и не собирались
Андрей2011
29 / 23 / 2
Регистрация: 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., подсказал попробовать вектор. И в результате я решил проблему хранения ссылок на объекты без создания самих объектов и в то же время с варьируемым кол-вом элементов!
Всем спасибо за помощь!
BRcr
 Аватар для BRcr
4003 / 2292 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
31.01.2012, 14:32     Экономия памяти или борьба с точками. (что-то типа массива ссылок хотелось бы иметь) #9
Цитата Сообщение от Андрей2011 Посмотреть сообщение
но уважаемый, I.M., подсказал попробовать вектор. И в результате я решил проблему хранения ссылок на объекты без создания самих объектов и в то же время с варьируемым кол-вом элементов!
Если вас действительно беспокоит выделение памяти, то советую разузнать про метод resize() класса vector.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
31.01.2012, 15:07     Экономия памяти или борьба с точками. (что-то типа массива ссылок хотелось бы иметь) #10
Андрей2011, если так хотелось использовать не вектор, а выделенный вручную динамический массив, то что мешало создать массив указателей?
C++
1
Class **ptrarr = new Class *[ptrarr_size];
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2012, 18:59     Экономия памяти или борьба с точками. (что-то типа массива ссылок хотелось бы иметь)
Еще ссылки по теме:

C++ Утечка памяти или что? Валидность итератора
Экономия памяти C++
C++ Добрый день, читал на хабре про АВЛ-деревья и хотелось бы кое-что уточнить

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

Или воспользуйтесь поиском по форуму:
Андрей2011
29 / 23 / 2
Регистрация: 18.01.2011
Сообщений: 359
31.01.2012, 18:59  [ТС]     Экономия памяти или борьба с точками. (что-то типа массива ссылок хотелось бы иметь) #11
блин. вот оно как можно было еще)) спасибо!
Yandex
Объявления
31.01.2012, 18:59     Экономия памяти или борьба с точками. (что-то типа массива ссылок хотелось бы иметь)
Ответ Создать тему
Опции темы

Текущее время: 23:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru