0 / 0 / 0
Регистрация: 07.09.2010
Сообщений: 25
|
|
1 | |
Динамический объект не содержит в себе линамических членов. Удалять ли его?21.09.2010, 15:04. Показов 1377. Ответов 17
Метки нет (Все метки)
Собственно в теме весь вопрос)
Непонятно, нужно ли вызывать delete для динамического объекта если его деструктор пустой так как все его члены принадлежат к автоматическому классу хранения.
0
|
21.09.2010, 15:04 | |
Ответы с готовыми решениями:
17
Описать тип "объект" содержит поля: вектор, его размер и его идентификатор в символьном виде При экспорте данных в pdf формате пишет: Убедитесь что объект существует и его имя не содержит ошибок? MVVM. Если окно содержит 1 TabControl, который в себе содержит много вкладок и в каждой может быть другой TabControl с вкладками Свойство содержит в себе массив |
0 / 0 / 0
Регистрация: 07.09.2010
Сообщений: 25
|
|
21.09.2010, 16:12 [ТС] | 3 |
Объект создан динамически! НО зачем вызывать delete, если члены этого объекта находятся в автоматичесом хранилище, т.е. удаляются сами, и его деструктор пустой!
0
|
21.09.2010, 16:15 | 4 |
Данные объекта, память для которого выделена динамически, не удалятся пока не будет вызван delete. Это утечка памяти.
Я же сказал Вам - все что создали с помощью new должно быть удалено с помощью delete.
0
|
0 / 0 / 0
Регистрация: 07.09.2010
Сообщений: 25
|
|
21.09.2010, 16:28 [ТС] | 6 |
я ничего не понял... т.е. что мне в деструкторе прописывать?? Удалять то нечего, получится пустой деструктор. А зачем тогда вызывать delete если она всего лишь неявно вызовет деструктор объекта и больше ничего, а деструктор у нас Пустой! Видимо я в чем-то заблуждаюсб но не пойму где
0
|
21.09.2010, 16:30 | 7 |
Stalk123, по ходу ты не очень понимаешь, что делает delete. Вот тут почитай https://www.cyberforum.ru/faq/thread130500.html
Вкратце суть в том, что delete делает две вещи: сначала вызывает деструктор, а потом освобождает память. Одна из стандартных ошибок начинающих
0
|
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
21.09.2010, 16:33 | 9 |
Stalk123, delete кроме вызова деструктора очищает память из под объекта, выделенную посредством вызова new. FAQ Конструкторы и деструкторы Вам в помощь.
0
|
Фрилансер
3709 / 2082 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
|
|
21.09.2010, 18:00 | 10 |
1) Даже если на секунду предположить, что Ваш объект действительно как-то хитро не занимает места, delete надо вызывать из принципа. На каждый new - обязательный delete. Если каждый раз задумываться, типа "а вдруг в данном случае delete можно не вызывать" - откроем неисчерпаемый кладезь ошибок. Оно нам надо?
2) Я не представляю, как члены объекта создаются в автоматическом хранилище. Объект создается вместе со своими членами. Плюс в нем вполне может создаваться всякая служебная информация. 3) Чем спорить - взяли бы отладчик да сами посмотрели на утечки памяти
0
|
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
|
||||||
21.09.2010, 18:14 | 11 | |||||
Могу добавить, что это невозможно. По стандарту объектов нулевого размера просто быть не может. Даже пустая структура:
1
|
21.09.2010, 18:17 | 12 |
Это нужно для того, чтобы для разных объектов this'ы имели разное значение. А это можно обеспечить только в том случае, если объект физически в памяти занимает ненулевое количество байт
2
|
0 / 0 / 0
Регистрация: 07.09.2010
Сообщений: 25
|
|
21.09.2010, 18:49 [ТС] | 13 |
0
|
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
|
||||||
21.09.2010, 19:15 | 14 | |||||
Если используете MSVS, то достаточно подключить <crtdbg.h> и вставить строку:
По завершении работы программы в Output Window будут выведена информация об утечках, если таковые будут.
1
|
0 / 0 / 0
Регистрация: 07.09.2010
Сообщений: 25
|
|
21.09.2010, 19:28 [ТС] | 15 |
Так значит я понял что delete надо вызывать, если объект динамический, несмотря на его поля.
2) Получается, что автоматические члены динамического объекта располагаются тоже в динамической памяти, но удаляются сами?)
0
|
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
21.09.2010, 19:35 | 16 |
0
|
0 / 0 / 0
Регистрация: 07.09.2010
Сообщений: 25
|
|
21.09.2010, 19:42 [ТС] | 17 |
Что же спасибо. Буду экспериментировать с msvs. Кстати получилось находить утечки. Есть еще подобные полезные команды
?
0
|
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
21.09.2010, 19:46 | 18 |
Смотря, что конкретно интресует. В любом случае, если собираетесь использовать MSVS, то обязательно подружитесь с MSDN - сэкономите кучу времени и нервов на поиске нужной информации.
0
|
21.09.2010, 19:46 | |
21.09.2010, 19:46 | |
Помогаю со студенческими работами здесь
18
Когда надо удалять объект Браузер FireFox содержит в себе вирусы Как удалять объект Graphics::TBitmap Как проверить, содержит ли Rt поле в себе линку Что содержит в себе массив Char *p[max] Вывести Popup, который содержит в себе материал статьи Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |