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

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

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

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

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

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

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

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

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

Правильное освобождение памяти - C++
Есть код class Test { public: int **container; int counter = 0; Test(unsigned int size) { container = new int*;

Правильное освобождение памяти - C++
Здрасти. Двумерный динам. массив: int** matr=new int*; for (int i=0; i<rows; ++i) matr=new int; ...

Освобождение памяти в деструкторе - C++
Здравствуйте у меня есть три класса: class Date { int iDay, iMonth, iYear; public: Date(); Date(Date&); Date(int Day,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6927 / 4120 / 942
Регистрация: 30.01.2014
Сообщений: 6,915
17.03.2014, 22:18     Удаление объекта и освобождение памяти #2
TheChosenOne, деструктор она вызывает )
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
17.03.2014, 22:19     Удаление объекта и освобождение памяти #3
Цитата Сообщение от TheChosenOne Посмотреть сообщение
Зачем уничтожать объект(и что при этом происходит с объектом),если можно просто отдать память ОС,а она там сама разберется(последняя ф-я).
А если в векторе объекты, у которых есть свои деструкторы?
DrOffset
6927 / 4120 / 942
Регистрация: 30.01.2014
Сообщений: 6,915
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Эксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
17.03.2014, 22:37     Удаление объекта и освобождение памяти #6
Цитата Сообщение от TheChosenOne Посмотреть сообщение
а что произойдет ?
не будут вызваны деструкторы уничтожаемых объектов. Последствия? Утечки ресурсов, нарушения инвариантов и т.д.
DrOffset
6927 / 4120 / 942
Регистрация: 30.01.2014
Сообщений: 6,915
17.03.2014, 22:38     Удаление объекта и освобождение памяти #7
Цитата Сообщение от TheChosenOne Посмотреть сообщение
о память просто вернется ос,а указатель elem станет некорректным (ну,я так предполагаю).
Да. Но если это был объект класса, который в конструкторе, например, открыл файл, то отсутствие вызова деструктора так и оставит этот файл открытым. Т.к. код закрытия в деструкторе не будет вызван.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2014, 22:50     Удаление объекта и освобождение памяти
Еще ссылки по теме:

Освобождение памяти в списках - C++
#pragma once class Node { public: int value; Node * next; Node(int data); ~Node(); };

Освобождение памяти в классах - C++
Программа работает правильно но при завершении выдает ошибку! Ошибка на деструкторе! Пожалуйста объясните почему! Спасибо! #ifndef...

Стек и освобождение памяти - C++
Пишу класс стека, реслизую в виде односвязного списка. stack.h #ifndef STACK_H_INCLUDED #define STACK_H_INCLUDED template &lt;class...

выделение и освобождение памяти - C++
В моей программе есть следующий код: char* lexems; // массив указателей на символ char* lexem; // вспомогательная...


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

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

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