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

Динамический объект не содержит в себе линамических членов. Удалять ли его? - C++

Восстановить пароль Регистрация
 
Stalk123
0 / 0 / 0
Регистрация: 07.09.2010
Сообщений: 25
21.09.2010, 15:04     Динамический объект не содержит в себе линамических членов. Удалять ли его? #1
Собственно в теме весь вопрос)
Непонятно, нужно ли вызывать delete для динамического объекта если его деструктор пустой так как все его члены принадлежат к автоматическому классу хранения.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2010, 15:04     Динамический объект не содержит в себе линамических членов. Удалять ли его?
Посмотрите здесь:

C++ Р.Лафоре его задача содержит ошибки исправьте!Это его программа
C++ Динамический глобальный объект.
C++ по поводу указателей. Как правильно задавать массив указателей и его удалять?
C++ где размещается массив и как его правильно удалять?
C++ функция возвращающая аргументу его значение сама по себе
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
21.09.2010, 15:15     Динамический объект не содержит в себе линамических членов. Удалять ли его? #2
Цитата Сообщение от Stalk123 Посмотреть сообщение
Непонятно, нужно ли вызывать delete
delete нужно вызывать только для объектов, созданных с помощью new.
Stalk123
0 / 0 / 0
Регистрация: 07.09.2010
Сообщений: 25
21.09.2010, 16:12  [ТС]     Динамический объект не содержит в себе линамических членов. Удалять ли его? #3
Цитата Сообщение от fasked Посмотреть сообщение
delete нужно вызывать только для объектов, созданных с помощью new.
Объект создан динамически! НО зачем вызывать delete, если члены этого объекта находятся в автоматичесом хранилище, т.е. удаляются сами, и его деструктор пустой!
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
21.09.2010, 16:15     Динамический объект не содержит в себе линамических членов. Удалять ли его? #4
Цитата Сообщение от Stalk123 Посмотреть сообщение
Объект создан динамически! НО зачем вызывать delete, если члены этого объекта находятся в автоматичесом хранилище, т.е. удаляются сами, и его деструктор пустой!
Данные объекта, память для которого выделена динамически, не удалятся пока не будет вызван delete. Это утечка памяти.
Я же сказал Вам - все что создали с помощью new должно быть удалено с помощью delete.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 319
Регистрация: 30.03.2009
Сообщений: 14,121
Записей в блоге: 26
21.09.2010, 16:23     Динамический объект не содержит в себе линамических членов. Удалять ли его? #5
Цитата Сообщение от Stalk123 Посмотреть сообщение
Объект создан динамически! НО зачем вызывать delete, если члены этого объекта находятся в автоматичесом хранилище, т.е. удаляются сами, и его деструктор пустой!
Чтобы освободить память, которую сам объект занимает.
Stalk123
0 / 0 / 0
Регистрация: 07.09.2010
Сообщений: 25
21.09.2010, 16:28  [ТС]     Динамический объект не содержит в себе линамических членов. Удалять ли его? #6
я ничего не понял... т.е. что мне в деструкторе прописывать?? Удалять то нечего, получится пустой деструктор. А зачем тогда вызывать delete если она всего лишь неявно вызовет деструктор объекта и больше ничего, а деструктор у нас Пустой! Видимо я в чем-то заблуждаюсб но не пойму где
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 319
Регистрация: 30.03.2009
Сообщений: 14,121
Записей в блоге: 26
21.09.2010, 16:30     Динамический объект не содержит в себе линамических членов. Удалять ли его? #7
Stalk123, по ходу ты не очень понимаешь, что делает delete. Вот тут почитай http://www.cyberforum.ru/faq/thread130500.html
Вкратце суть в том, что delete делает две вещи: сначала вызывает деструктор, а потом освобождает память. Одна из стандартных ошибок начинающих
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
21.09.2010, 16:32     Динамический объект не содержит в себе линамических членов. Удалять ли его? #8
Цитата Сообщение от Stalk123 Посмотреть сообщение
я ничего не понял... т.е. что мне в деструкторе прописывать?? Удалять то нечего, получится пустой деструктор. А зачем тогда вызывать delete если она всего лишь неявно вызовет деструктор объекта и больше ничего, а деструктор у нас Пустой! Видимо я в чем-то заблуждаюсб но не пойму где
delete не только вызывает деструктор, delete освобождает захваченную память. если этого не сделать, то занятая память не сможет повторно использоваться.
читайте книги.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
21.09.2010, 16:33     Динамический объект не содержит в себе линамических членов. Удалять ли его? #9
Stalk123, delete кроме вызова деструктора очищает память из под объекта, выделенную посредством вызова new. FAQ Конструкторы и деструкторы Вам в помощь.
Black Fregat
 Аватар для Black Fregat
1353 / 983 / 215
Регистрация: 31.05.2009
Сообщений: 4,093
21.09.2010, 18:00     Динамический объект не содержит в себе линамических членов. Удалять ли его? #10
Цитата Сообщение от Stalk123 Посмотреть сообщение
Объект создан динамически! НО зачем вызывать delete, если члены этого объекта находятся в автоматичеком хранилище, т.е. удаляются сами, и его деструктор пустой!
1) Даже если на секунду предположить, что Ваш объект действительно как-то хитро не занимает места, delete надо вызывать из принципа. На каждый new - обязательный delete. Если каждый раз задумываться, типа "а вдруг в данном случае delete можно не вызывать" - откроем неисчерпаемый кладезь ошибок. Оно нам надо?

2) Я не представляю, как члены объекта создаются в автоматическом хранилище. Объект создается вместе со своими членами. Плюс в нем вполне может создаваться всякая служебная информация.

3) Чем спорить - взяли бы отладчик да сами посмотрели на утечки памяти
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
21.09.2010, 18:14     Динамический объект не содержит в себе линамических членов. Удалять ли его? #11
Цитата Сообщение от Black Fregat Посмотреть сообщение
Даже если на секунду предположить, что Ваш объект действительно как-то хитро не занимает места, delete надо вызывать из принципа.
Могу добавить, что это невозможно. По стандарту объектов нулевого размера просто быть не может. Даже пустая структура:
C++
1
struct Foo {};
занимает один байт.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 319
Регистрация: 30.03.2009
Сообщений: 14,121
Записей в блоге: 26
21.09.2010, 18:17     Динамический объект не содержит в себе линамических членов. Удалять ли его? #12
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Могу добавить, что это невозможно. По стандарту объектов нулевого размера просто быть не может. Даже пустая структура:
C++
1
struct Foo {};
занимает один байт.
Это нужно для того, чтобы для разных объектов this'ы имели разное значение. А это можно обеспечить только в том случае, если объект физически в памяти занимает ненулевое количество байт
Stalk123
0 / 0 / 0
Регистрация: 07.09.2010
Сообщений: 25
21.09.2010, 18:49  [ТС]     Динамический объект не содержит в себе линамических членов. Удалять ли его? #13
Цитата Сообщение от Black Fregat Посмотреть сообщение
3) Чем спорить - взяли бы отладчик да сами посмотрели на утечки памяти
Вот, есть простенький отлатчик чтобы за утечками следить под виндой?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
21.09.2010, 19:15     Динамический объект не содержит в себе линамических членов. Удалять ли его? #14
Цитата Сообщение от Stalk123 Посмотреть сообщение
Вот, есть простенький отлатчик чтобы за утечками следить под виндой?
Если используете MSVS, то достаточно подключить <crtdbg.h> и вставить строку:
C++
1
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
в начале main или WinMain.
По завершении работы программы в Output Window будут выведена информация об утечках, если таковые будут.
Stalk123
0 / 0 / 0
Регистрация: 07.09.2010
Сообщений: 25
21.09.2010, 19:28  [ТС]     Динамический объект не содержит в себе линамических членов. Удалять ли его? #15
Так значит я понял что delete надо вызывать, если объект динамический, несмотря на его поля.
2) Получается, что автоматические члены динамического объекта располагаются тоже в динамической памяти, но удаляются сами?)
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
21.09.2010, 19:35     Динамический объект не содержит в себе линамических членов. Удалять ли его? #16
Цитата Сообщение от Stalk123 Посмотреть сообщение
Получается, что автоматические члены динамического объекта располагаются тоже в динамической памяти, но удаляются сами?)
Грубо говоря, да, при вызове delete.
Stalk123
0 / 0 / 0
Регистрация: 07.09.2010
Сообщений: 25
21.09.2010, 19:42  [ТС]     Динамический объект не содержит в себе линамических членов. Удалять ли его? #17
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Грубо говоря, да, при вызове delete.
Что же спасибо. Буду экспериментировать с msvs. Кстати получилось находить утечки. Есть еще подобные полезные команды
?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2010, 19:46     Динамический объект не содержит в себе линамических членов. Удалять ли его?
Еще ссылки по теме:

C++ Динамический объект класса и деструктор
Может ли объект-член, или объект-элемент достучаться к содержащему его? C++
C++ Создайте класс employee, который содержит имя (объект класса string) и номер (типа long) служащего

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

Или воспользуйтесь поиском по форуму:
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
21.09.2010, 19:46     Динамический объект не содержит в себе линамических членов. Удалять ли его? #18
Цитата Сообщение от Stalk123 Посмотреть сообщение
Есть еще подобные полезные команды?
Смотря, что конкретно интресует. В любом случае, если собираетесь использовать MSVS, то обязательно подружитесь с MSDN - сэкономите кучу времени и нервов на поиске нужной информации.
Yandex
Объявления
21.09.2010, 19:46     Динамический объект не содержит в себе линамических членов. Удалять ли его?
Ответ Создать тему
Опции темы

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