Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Андрей2011
29 / 23 / 2
Регистрация: 18.01.2011
Сообщений: 359
#1

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

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

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

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

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

QDir и экономия памяти - C++ Qt
Пишу программу под ARM. Вывожу в таблицу содержимое директории расположенной на Flash с помощью QDir::entryList(). Количество файлов может...

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

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

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

10
I.M.
566 / 549 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
31.01.2012, 12:13 #2
Да, так можно. Например
std::vector<Point*> point_array;
А как вы сейчас храните поинты, если не в массиве?
1
Андрей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 минуту
т.е. указатель на объект. ему я присваиваю новый массив точек и т.п.
в итоге когда проверяю на создание точек, у меня создается лишняя именно вот в группе.
0
silent_1991
Эксперт С++
4993 / 3051 / 149
Регистрация: 11.11.2009
Сообщений: 7,038
Завершенные тесты: 1
31.01.2012, 12:28 #4
Андрей2011, что-то не очень понятно...
0
Андрей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;
тогда все не так уж и плохо.
0
silent_1991
Эксперт С++
4993 / 3051 / 149
Регистрация: 11.11.2009
Сообщений: 7,038
Завершенные тесты: 1
31.01.2012, 13:17 #6
Андрей2011, я вот упорно не могу понять, что вас беспокоит? Насколько я понял, вы хотите связать все группы одним общим набором точек. Но это логически неверно, если я правильно понимаю смысл группы.
1
BRcr
4011 / 2301 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
31.01.2012, 13:41 #7
Цитата Сообщение от silent_1991 Посмотреть сообщение
Андрей2011, я вот упорно не могу понять, что вас беспокоит? Насколько я понял, вы хотите связать все группы одним общим набором точек. Но это логически неверно, если я правильно понимаю смысл группы.
Да нет, автор вроде как пытается нарисовать обычную обертку для массива.
Цитата Сообщение от Андрей2011 Посмотреть сообщение
Хм. вообще при создании новой группы создается только лишь одна точка.
Видимо из за этого:
C++
1
TTo4ka *MassivTo4Grup;
Вообще, это создание указателя на объект класса TTo4ka, а никакой ни точки. Впоследствии вы используете его, как указатель на первый элемент массива. Так что все ваши растраты памяти - это указатель.

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

Длина строки, sizeof, непонятный урок и экономия памяти - Delphi
Всем снова здравствуйте! y9DwP32LaGc в этом эпизоде происходит нечто не совсем понятное. Автор с начала объявляет переменную с...

Борьба с утечками памяти - C++
Знаю, что вроде бы есть дополнения к Студии, с помощью которых можно отслеживать утечки.... Или подскажите как это можно сделать...

Борьба с чистильщиком памяти (оптимизаторами) - Программирование Android
Пытаюсь повторить программу https://play.google.com/store/apps/details?id=com.urbandroid.inline Простая системная флай-панелька с...

Борьба с поеданием памяти оператором new - C++
Здравствуйте! Столкнулся с некоторой проблемкой, решение ей не получилось найти. Может у Вас получится. Имеется код: subset...


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

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

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