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

Удаление объекта и освобождение памяти - C++

Восстановить пароль Регистрация
 
TheChosenOne
13 / 13 / 1
Регистрация: 13.09.2013
Сообщений: 113
17.03.2014, 22:15     Удаление объекта и освобождение памяти #1
Есть вот такой код. Интересуют выделенные ф-и. Последняя ясна - мы просто возвращаем память нашей ОС. Предпоследняя уничтожает объект (о_О). Собственно вопрос: Зачем уничтожать объект(и что при этом происходит с объектом),если можно просто отдать память ОС,а она там сама разберется(последняя ф-я).
Буду благодарен за понятный ответ (на пальцах)
Миниатюры
Удаление объекта и освобождение памяти  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2014, 22:15     Удаление объекта и освобождение памяти
Посмотрите здесь:

C++ Освобождение памяти
Освобождение памяти (удаление массива char) и raised exception class EAccessViolation C++
Освобождение памяти C++
C++ освобождение памяти
Освобождение памяти, удаление бинарного дерева C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6456 / 3830 / 885
Регистрация: 30.01.2014
Сообщений: 6,627
17.03.2014, 22:18     Удаление объекта и освобождение памяти #2
TheChosenOne, деструктор она вызывает )
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11840 / 6819 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
17.03.2014, 22:19     Удаление объекта и освобождение памяти #3
Цитата Сообщение от TheChosenOne Посмотреть сообщение
Зачем уничтожать объект(и что при этом происходит с объектом),если можно просто отдать память ОС,а она там сама разберется(последняя ф-я).
А если в векторе объекты, у которых есть свои деструкторы?
DrOffset
6456 / 3830 / 885
Регистрация: 30.01.2014
Сообщений: 6,627
17.03.2014, 22:23     Удаление объекта и освобождение памяти #4
TheChosenOne,
Реализация:
C++
1
2
3
4
5
  template <typename Tp>
  inline void destroy(Tp* pointer)
  { 
       pointer->~Tp(); 
  }
TheChosenOne
13 / 13 / 1
Регистрация: 13.09.2013
Сообщений: 113
17.03.2014, 22:33  [ТС]     Удаление объекта и освобождение памяти #5
Croessmah, а что произойдет ? Если не вызывать alloc.destroy(&elem);,а сразу вызвать alloc.deallocate(elem,space) ,где space - кол-во элементов, то память просто вернется ос,а указатель elem станет некорректным (ну,я так предполагаю).
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11840 / 6819 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
17.03.2014, 22:37     Удаление объекта и освобождение памяти #6
Цитата Сообщение от TheChosenOne Посмотреть сообщение
а что произойдет ?
не будут вызваны деструкторы уничтожаемых объектов. Последствия? Утечки ресурсов, нарушения инвариантов и т.д.
DrOffset
6456 / 3830 / 885
Регистрация: 30.01.2014
Сообщений: 6,627
17.03.2014, 22:38     Удаление объекта и освобождение памяти #7
Цитата Сообщение от TheChosenOne Посмотреть сообщение
о память просто вернется ос,а указатель elem станет некорректным (ну,я так предполагаю).
Да. Но если это был объект класса, который в конструкторе, например, открыл файл, то отсутствие вызова деструктора так и оставит этот файл открытым. Т.к. код закрытия в деструкторе не будет вызван.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2014, 22:50     Удаление объекта и освобождение памяти
Еще ссылки по теме:

с++ Освобождение памяти C++
C++ Освобождение памяти в C++
Освобождение памяти C++

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

Или воспользуйтесь поиском по форуму:
TheChosenOne
13 / 13 / 1
Регистрация: 13.09.2013
Сообщений: 113
17.03.2014, 22:50  [ТС]     Удаление объекта и освобождение памяти #8
Ааааа,точно,понял,Спасибо всем
Yandex
Объявления
17.03.2014, 22:50     Удаление объекта и освобождение памяти
Ответ Создать тему
Опции темы

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