Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> delete для динам. массива подкласса класса, ... 
:(
    Опции темы
[ss]3L33T@
  Дата 29.11.2004, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 14.10.2003
Где: Казармы

Репутация: -1
Всего: 1



Код

#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;
}

???
--------------------
Понастоящему добрый человек всегда простит и забудет вам ваше зло, но он никогда не простит и не забудет вашего добра[ss]3L33T@
PM MAIL WWW ICQ   Вверх
gray_k
Дата 29.11.2004, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1015
Регистрация: 9.1.2003
Где: Москва

Репутация: нет
Всего: 22



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


--------------------
С уважением.
Gray.
PM MAIL   Вверх
The Thing
Дата 29.11.2004, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 286
Регистрация: 6.9.2004

Репутация: нет
Всего: 3



Цитата
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];

Это сообщение отредактировал(а) The Thing - 29.11.2004, 14:23


--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
Mad
Дата 29.11.2004, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

Репутация: 7
Всего: 19



[ss]3L33T@
согласен с gray_k по поводу деструктора.

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


--------------------
user posted image
PM MAIL   Вверх
[ss]3L33T@
Дата 29.11.2004, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 14.10.2003
Где: Казармы

Репутация: -1
Всего: 1



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

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

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

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

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

Дело в том, что очищать память надо далеко не по завершению программы, а, например, по середине её выполнения или в ещё какой другой момент времени.
--------------------
Понастоящему добрый человек всегда простит и забудет вам ваше зло, но он никогда не простит и не забудет вашего добра[ss]3L33T@
PM MAIL WWW ICQ   Вверх
The Thing
Дата 29.11.2004, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 286
Регистрация: 6.9.2004

Репутация: нет
Всего: 3



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


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

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



--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0506 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.