Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > delete для динам. массива подкласса класса


Автор: [ss]3L33T@ 29.11.2004, 13:07
Код

#include <stdio.h>
class cls
{
  float ff;
};
class cls2
{
  cls* clss;
};
void main()
{
cls2* mycls=new cls2[20];
for (int i=0;i<20;i++)
mycls[i].clss=new cls[10];
delete [] mycls;
}

В данном случае, будет ли освобождена память из-под mycls->clss?
Или же её надо освобождать отдельно:
Код

...
void main()
{
cls2* mycls=new cls2[20];
for (int i=0;i<20;i++)
mycls[i].clss=new cls[10];
for (i=0;i<20;i++)
delete [] mycls[i].clss;
delete [] mycls;
}

???

Автор: gray_k 29.11.2004, 13:22
Не будет. Но то, что ты предлагаешь - ерунда.
Надо деструктор написать.

Автор: The Thing 29.11.2004, 14:20
Цитата
3L33T@,29.11.2004,  13:07]
Код

#include <stdio.h>
class cls
{
  float ff;
};
class cls2
{
  cls* clss;
};
void main()
{
cls2* mycls=new cls2[20];
for (int i=0;i<20;i++)
mycls[i].clss=new cls[10];
delete [] mycls;
}

В данном случае, будет ли освобождена память из-под mycls->clss?
Или же её надо освобождать отдельно:
Код

...
void main()
{
cls2* mycls=new cls2[20];
for (int i=0;i<20;i++)
mycls[i].clss=new cls[10];
for (i=0;i<20;i++)
delete [] mycls[i].clss;
delete [] mycls;
}


вообще-то твой пример работать не будет... так как в классе cls2 указатель на объект класса cls создан в приватной зоне..(privat)..надо писать..

class cls
{
float ff;
};
class cls2
{
public:
cls* clss;
};

тогда прокатит mycls[i].clss=new cls[10];

Автор: Mad 29.11.2004, 14:25
[ss]3L33T@
согласен с gray_k по поводу деструктора.

И еще, определение такого дин. массива классов, это не очень.
Если тебе зарание известно кол-во - определяй статический массив.
Если нет - используй vector.

Автор: [ss]3L33T@ 29.11.2004, 16:03
Цитата
вообще-то твой пример работать не будет... так как в классе cls2 указатель на объект класса cls создан в приватной зоне..(privat)..надо писать..

Ну да. Это мелочь. Не в этом смысл.
Цитата
И еще, определение такого дин. массива классов, это не очень.

Это почему ещё?
Цитата
Если нет - используй vector.

Не собираюсь использовать ничего стандартного. smile
Цитата
Не будет. Но то, что ты предлагаешь - ерунда.
Надо деструктор написать.

Предложи свою "неерунду".

Дело в том, что очищать память надо далеко не по завершению программы, а, например, по середине её выполнения или в ещё какой другой момент времени.

Автор: The Thing 29.11.2004, 22:53
Цитата
3L33T@, 29.11.2004,  16:03]Дело в том, что очищать память надо далеко не по завершению программы, а, например, по середине её выполнения или в ещё какой другой момент времени.


тогда ответ на вопрос...
Цитата
3L33T@, 29.11.2004,  13:07]В данном случае, будет ли освобождена память из-под mycls->clss?
Или же её надо освобождать отдельно:

нет не будет, надо осворбождать отдельно...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)