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

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

Войти
Регистрация
Восстановить пароль
 
TheChosenOne
13 / 13 / 1
Регистрация: 13.09.2013
Сообщений: 113
#1

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

17.03.2014, 22:15. Просмотров 286. Ответов 7
Метки нет (Все метки)

Есть вот такой код. Интересуют выделенные ф-и. Последняя ясна - мы просто возвращаем память нашей ОС. Предпоследняя уничтожает объект (о_О). Собственно вопрос: Зачем уничтожать объект(и что при этом происходит с объектом),если можно просто отдать память ОС,а она там сама разберется(последняя ф-я).
Буду благодарен за понятный ответ (на пальцах)
Миниатюры
Удаление объекта и освобождение памяти  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6820 / 4031 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
17.03.2014, 22:18     Удаление объекта и освобождение памяти #2
TheChosenOne, деструктор она вызывает )
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12537 / 7099 / 797
Регистрация: 27.09.2012
Сообщений: 17,521
Записей в блоге: 2
Завершенные тесты: 1
17.03.2014, 22:19     Удаление объекта и освобождение памяти #3
Цитата Сообщение от TheChosenOne Посмотреть сообщение
Зачем уничтожать объект(и что при этом происходит с объектом),если можно просто отдать память ОС,а она там сама разберется(последняя ф-я).
А если в векторе объекты, у которых есть свои деструкторы?
DrOffset
6820 / 4031 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
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
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12537 / 7099 / 797
Регистрация: 27.09.2012
Сообщений: 17,521
Записей в блоге: 2
Завершенные тесты: 1
17.03.2014, 22:37     Удаление объекта и освобождение памяти #6
Цитата Сообщение от TheChosenOne Посмотреть сообщение
а что произойдет ?
не будут вызваны деструкторы уничтожаемых объектов. Последствия? Утечки ресурсов, нарушения инвариантов и т.д.
DrOffset
6820 / 4031 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
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++ Освобождение памяти в c++
Освобождение памяти C++
C++ Освобождение памяти

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

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

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