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

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

Войти
Регистрация
Восстановить пароль
 
Stalk123
0 / 0 / 0
Регистрация: 07.09.2010
Сообщений: 25
#1

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

21.09.2010, 15:04. Просмотров 894. Ответов 17
Метки нет (Все метки)

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

Динамический глобальный объект. - C++
Здравствуйте. Пишу Auto-Clicker . Текущая версия содержит заранее созданный массив объектов класса "TClickBase" в каждом объекте хранятся...

Динамический объект класса - C++
Нужно создать динамический объект класса, на примере кода ниже. Я создал статический объект, который выводит сумму после записи данных(двух...

Динамический объект класса и деструктор - C++
Добрый вечер. Есть класс, конструктор и деструктор: class B { int a; public: B (); ~B (); };

где размещается массив и как его правильно удалять? - C++
У меня вопрос: в примере ниже создается объект класса Map в динамической памяти. В какой памяти тогда располагается массив m? и как его...

функция возвращающая аргументу его значение сама по себе - C++
Глупость, но не иначе не могу объяснить это явление. гуляя по сайтам наткнулся на пузырьковую сортировку и увидел данный код: void...

Создайте класс employee, который содержит имя (объект класса string) и номер (типа long) служащего - C++
Создайте класс employee, который содержит имя (объект класса string) и но- мер (типа long) служащего. Включите в него метод getdata(),...

"Объект содержит не соответствующие квалификаторы типа" - C++
столкнулся с проблемой, не могу вызвать функцию, пишет "объект содержит не соответствующие квалификаторы типа" void...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
21.09.2010, 16:15     Динамический объект не содержит в себе линамических членов. Удалять ли его? #4
Цитата Сообщение от Stalk123 Посмотреть сообщение
Объект создан динамически! НО зачем вызывать delete, если члены этого объекта находятся в автоматичесом хранилище, т.е. удаляются сами, и его деструктор пустой!
Данные объекта, память для которого выделена динамически, не удалятся пока не будет вызван delete. Это утечка памяти.
Я же сказал Вам - все что создали с помощью new должно быть удалено с помощью delete.
Evg
Эксперт CАвтор FAQ
17530 / 5768 / 368
Регистрация: 30.03.2009
Сообщений: 15,865
Записей в блоге: 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
Эксперт CАвтор FAQ
17530 / 5768 / 368
Регистрация: 30.03.2009
Сообщений: 15,865
Записей в блоге: 26
21.09.2010, 16:30     Динамический объект не содержит в себе линамических членов. Удалять ли его? #7
Stalk123, по ходу ты не очень понимаешь, что делает delete. Вот тут почитай http://www.cyberforum.ru/faq/thread130500.html
Вкратце суть в том, что delete делает две вещи: сначала вызывает деструктор, а потом освобождает память. Одна из стандартных ошибок начинающих
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
21.09.2010, 16:32     Динамический объект не содержит в себе линамических членов. Удалять ли его? #8
Цитата Сообщение от Stalk123 Посмотреть сообщение
я ничего не понял... т.е. что мне в деструкторе прописывать?? Удалять то нечего, получится пустой деструктор. А зачем тогда вызывать delete если она всего лишь неявно вызовет деструктор объекта и больше ничего, а деструктор у нас Пустой! Видимо я в чем-то заблуждаюсб но не пойму где
delete не только вызывает деструктор, delete освобождает захваченную память. если этого не сделать, то занятая память не сможет повторно использоваться.
читайте книги.
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
21.09.2010, 16:33     Динамический объект не содержит в себе линамических членов. Удалять ли его? #9
Stalk123, delete кроме вызова деструктора очищает память из под объекта, выделенную посредством вызова new. FAQ Конструкторы и деструкторы Вам в помощь.
Black Fregat
1381 / 1011 / 222
Регистрация: 31.05.2009
Сообщений: 4,240
21.09.2010, 18:00     Динамический объект не содержит в себе линамических членов. Удалять ли его? #10
Цитата Сообщение от Stalk123 Посмотреть сообщение
Объект создан динамически! НО зачем вызывать delete, если члены этого объекта находятся в автоматичеком хранилище, т.е. удаляются сами, и его деструктор пустой!
1) Даже если на секунду предположить, что Ваш объект действительно как-то хитро не занимает места, delete надо вызывать из принципа. На каждый new - обязательный delete. Если каждый раз задумываться, типа "а вдруг в данном случае delete можно не вызывать" - откроем неисчерпаемый кладезь ошибок. Оно нам надо?

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

3) Чем спорить - взяли бы отладчик да сами посмотрели на утечки памяти
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
21.09.2010, 18:14     Динамический объект не содержит в себе линамических членов. Удалять ли его? #11
Цитата Сообщение от Black Fregat Посмотреть сообщение
Даже если на секунду предположить, что Ваш объект действительно как-то хитро не занимает места, delete надо вызывать из принципа.
Могу добавить, что это невозможно. По стандарту объектов нулевого размера просто быть не может. Даже пустая структура:
C++
1
struct Foo {};
занимает один байт.
Evg
Эксперт CАвтор FAQ
17530 / 5768 / 368
Регистрация: 30.03.2009
Сообщений: 15,865
Записей в блоге: 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++
2300 / 1670 / 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++
2300 / 1670 / 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     Динамический объект не содержит в себе линамических членов. Удалять ли его?
Еще ссылки по теме:

Динамический массив string и его вывод - C++
Всем доброго времени суток! Есть цикл, в котором проверяется строка есть ли в ней символ из алфавита. Если да, то нужно её запихнуть в...

Динамический массив new и его структура выделения памяти? - C++
Доброго времени суток, форумчане! Долго искал возможность определения размера динамического массива выделенного new (sizeof конечно...

Создать динамический массив, заполнить его и вывести - C++
Задача такая, создать динамический массив, заполнить его и вывести. Набросал код #include &lt;iostream&gt; using namespace std; class...

Создать динамический массив объектов, инициализировать его - C++
Создать динамический массив объектов, инициализировать его. Организовать поиск элемента в массиве по заданному значению. Создать иерархии...

Создать динамический двумерный массив и заполнить его - C++
Всем привет. Помогите пожалуйста реализовать код. ТЗ: Создать программу с динамическим двумерным массивом, размерность запрашивать с...


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

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

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