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

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

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

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

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

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

Освобождение памяти, удаление бинарного дерева - C++
Добрый день. Написал программу, которая ищет в файле неиспользуемые переменные, т.е. те, которые объявлены. Всё в общем-то работает, но...

Освобождение памяти (удаление массива char) и raised exception class EAccessViolation - C++
Подскажите плиз, есть программа, вот кусок AnsiString inputText; int inputTextLength; inputText= Form1->Edit1->Text; ...

Удаление объекта, созданного в динамической памяти - C++
Здравствуйте! Подскажите, пожалуйста, правильное решение такой проблемы (возможно, это и не проблема вовсе :) . Вот фрагмент кода: ...

резервирование памяти/освобождение памяти для трехмерного массива - C++
Необходимо создать трехмерный массив (A), в котором элементы вдоль направления Z выли бы выровнены по 16 байт. Есть две проблемы: ...

Освобождение памяти в C++ - C++
Добрый день! В моей программе в функции выделяется память (new char) под символьный массив, который является элементом структуры. Это...

Освобождение памяти - C++
Собственно есть простенький класс class Human { public: Human ( ); void ptintHuman(); private: static long...

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

освобождение памяти - C++
Помогите найти ошибку, программа вилиться когда освобождаю память! Здесь выделения памяти double **CreateArray() { double...

Освобождение памяти в c++ - C++
Привет, помогите разобраться с освобождением памяти в c++. Я так понимаю, что если освободить память, то переменная удаляется, но почему же...

с++ Освобождение памяти - C++
Здравствуйте, объявляю в классе: А ** а; Далее выделяю память в функции: а=0; a = new A*; for(uint i=0;i&lt;5;++i) { a =...

Освобождение памяти - C++
#include&lt;iostream&gt; #include&lt;cstring&gt; using namespace std; struct stringy{ char * str; int ct; }; stringy &amp; set(stringy &amp;...


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
17.03.2014, 22:50
Ответ Создать тему
Опции темы

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