![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 15.08.2012
Сообщений: 39
|
![]()
Здравствуйте, хочу узнать правильно ли происходит освобождение памяти (все ли освобождается, то что было выделено) с помощью деструктора.
Спасибо. Код:
Код:
Код:
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
пойдёт для сельской местности
|
![]() |
![]() |
![]() |
#3 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() Цитата:
2. В диструкторе стоит ненужная проверка на нуль. Её можно убрать, что б не мельтешила. Но если не убирать, компилятор скорее всего самостоятельно её выпилит. 3. Если у вас используются сырые указатели в качестве мемберов класса, значит вам нужны явные конструктор копии, и оператор= В противном случае ваш код сломается в диструкторе, если будет созданно более одного экземпляра класса через конструктор копии, или оператор= Пример: http://rextester.com/PMJ8913 Код:
|
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 15.08.2012
Сообщений: 39
|
![]()
if (NextValue != 0) delete NextValue;
Это как бы проверка указывает ли NextValue на еще 1 объект типа list, то есть если не указывает (равен 0), то это конец цепочки всех объектов list (дальше уже нету объектов типа list) и смысла делать delete NextValue нету. Я могу не делать эту проверку, компилятор сам поймет то что нечего освобождать по 0 адресу? Я правильно понимаю? Спасибо. В противном случае ваш код сломается в диструкторе, если будет созданно более одного экземпляра класса через конструктор копии, или оператор= Тут будет - double free, я просто сделал пока что для 1 экземпляра) (в смысле конструктор копий и перегрузку оператора= пока не задевал, и не планировал что бы ее кто-то другой задевал. Про потоки мне еще пока рано думать (не дорос))))))). Последний раз редактировалось Stilet; 16.10.2014 в 21:28. |
![]() |
![]() |
![]() |
#5 | ||
Старожил
Регистрация: 15.02.2010
Сообщений: 15,830
|
![]() Цитата:
Цитата:
|
||
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
Компилятор сам втихаря конструктор копии делает (который тупо копирует члены объекта), если программист свой вариант не сделал.
Кстати, зачем value указателем сделан? |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 15.08.2012
Сообщений: 39
|
![]()
Указатель типа int класса list (*Value) указывает по адресу объекта типа int (выделенного динамически в конструкторе класса list).
|
![]() |
![]() |
![]() |
#8 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() Цитата:
Если указатель нулевой, удаления не происходит. Он просто игнорируется. Поэтому, нет никакого смысла ставить ещё одну проверку. |
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос по STL. template <class Iterator> | Smitt&Wesson | C++ Builder | 8 | 05.06.2014 10:03 |
Делфи: выдает ошибку "Project raised exception class EstringListError wits message 'list index out of bounds (-1)' | Катерина19 | Помощь студентам | 1 | 15.04.2014 12:15 |
Не удается добавить сортировку в List Control: Error 64 error C2504: 'CHeaderCtrl' : base class undefined | vaan.sk | Общие вопросы C/C++ | 2 | 29.11.2012 09:48 |
project raised exception class estringlisterror with message list index out of bounds | obsession | Общие вопросы Delphi | 23 | 09.05.2011 01:31 |
ошибка raized exception class EListError with message 'List index out of bounds(1)'.Process stopped | SGRaptor | Софт | 0 | 22.05.2010 19:12 |