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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
#1

Удаление объектов(деструкторы) - C++

13.02.2013, 19:53. Просмотров 1999. Ответов 8
Метки нет (Все метки)

Можете нормально объяснить как пользоваться деструкторами.
Допустим мне нужно удалить созданный объект в классе, КАК????????
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2013, 19:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление объектов(деструкторы) (C++):

Нужно ли вызывать деструкторы для объектов помувленного массива? - C++
Собственно, сабж. Будет ли правильным вызывать деструкторы элементов массива, которые были перемещены, или это бесполезная трата...

Функция создает объекты и указателями на них заполняет массив. При выходе из функции вызываются деструкторы объектов. Как сохранить объекты? - C++
Вопрос прост: как при выходе из функции сохранить объекты, которые были созданы в данной функции (указатели объектов положены в массив)?

Удаление из вектора объектов - C++
Есть вектор, состоящий из объектов какого-то класса. Есть объект принадлежащий этому классу. На вход методу приходит этот объект и его...

Создание и удаление объектов - C++
Люди, прошу прошения за тупой вопрос, но что-то в гугле сходу не нашел. Вот, допустим, есть класс реализующий простенькую очередь. ...

Ненужное удаление объектов - C++
В классе есть метод, в котором при определенных условиях создаются объекты и помещаются в список, так вот как сделать так чтобы объекты...

Удаление объектов класса - C++
Никак не могу понять, как правильно освободить память. Подскажите пожалуйста в чем ошибка. #include "Head.h" int min(int a, int b) { ...

8
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
13.02.2013, 20:09 #2
никак. объекты сами удаляются, когда их время жизни заканчивается.
явный вызов деструктора иногда применяется, но это скорее исключение, чем правило, и у тебя вряд ли эти случаи
1
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
14.02.2013, 13:19 #3
вообще обычно в деструкторах прописываю очищение памяти из под указателей, выделенной в конструкторе, ну или либо какието другие адэкватные вещи, которые никак не удаляются после того как

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
их время жизни заканчивается.
Либо, что чаще всего в деструкторах прописывают вызов функции которая рекурсивно или итеративно подчищает память из под некоторых видов классов/структур типа деревья, графы и т.п.
1
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
14.02.2013, 22:35 #4
Цитата Сообщение от MrGrig Посмотреть сообщение
Либо, что чаще всего в деструкторах прописывают вызов функции которая рекурсивно или итеративно подчищает память из под некоторых видов классов/структур типа деревья, графы и т.п.
В деструкторе можно прописать много всего. Вопрос был "как с помощью деструктора удалить объект класса", а не "что прописывать в деструкторе". Так вот тут присутствует распространённое не понимаение. Некоторые считают, что деструктор удаляет объект.

Деструктор присутствует у объекта не для того, чтобы его удалять, а для того, чтобы производить "деинициализацию" перед удалением. Какая это деинициализация? - всякая в зависимости от того, что за класс. Может в нём нужно освобождать память, на которую хранятся указатели в полях класса, а может ещё что. Может в нём требуется уменьшать статический счётчик объектов, может закрывать какие-нибудь открытые классом файлы, может уменьшать так называемые, "счётчики ссылок"... да мало ли что писать можно в деструкторе? Вопрос был не об этом.

Добавлено через 5 минут
Ответ: явный вызов деструктора в большинстве случаев не нужен.
1
daslex
1280 / 524 / 107
Регистрация: 02.08.2011
Сообщений: 2,739
14.02.2013, 23:40 #5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Ответ: явный вызов деструктора в большинстве случаев не нужен.

Не по теме:

Вот и разработчики разные, наверное, такого же мнения были... Разработчики разного рода движков интернет-браузеров, некоторых игр и некоторого остального софта, которые память жрут и проц грузят совсем не по-детски.


Добавлю к словам Kuzia domovenok, что чтобы понимать как пользоваться деструкторами, для начала нужно хорошо понять объекты, к которым эти деструкторы планируется применять. Поймешь как строил - поймешь как аккуратно разобрать.
0
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
15.02.2013, 00:01 #6
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
не понимаение

Не по теме:

блин, как я мог написать это?


Цитата Сообщение от daslex Посмотреть сообщение
Вот и разработчики разные, наверное, такого же мнения были... Разработчики разного рода движков интернет-браузеров, некоторых игр и некоторого остального софта, которые память жрут и проц грузят совсем не по-детски.
Я рад, что разработчики со мной согласны. А ты, должно быть, в своих программах ни разу не используешь new и delete, а наоборот, используешь свой самописный менеджер памяти, который память не жрёт, проц не грузит, деструкторы вызывает явно и вообще работает, лучше чем какие-то нубы из Майкрософта могли придумать. "Кому нужны эти new и delete.."
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
15.02.2013, 00:03 #7
добавлю сарказм не по делу от непонимания или незнания что явный вызов деструктора, это:
SomeClass::~SomeClass(); а не delete someClassPtr; Врятли тот, кто в состоянии написать
интернет-браузер или игру не умеют работать с памятью. Кроме этого, в нормальном коде стоит стремится к уменьшению количествa явных вызовов delete, предоставив это спец объектам вроде смартпоинтеров. В таких
случаях явных вызов delete не нужен.
0
daslex
1280 / 524 / 107
Регистрация: 02.08.2011
Сообщений: 2,739
15.02.2013, 00:59 #8
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А ты, должно быть
Чего не знаешь - того не говори.
0
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
15.02.2013, 01:17 #9
Цитата Сообщение от daslex Посмотреть сообщение
Чего не знаешь - того не говори
Если ты их и правда используешь, то ты вряд ли вызываешь деструктор сам. Прочти слова DU.
0
15.02.2013, 01:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2013, 01:17
Привет! Вот еще темы с ответами:

Удаление динамических объектов - C++
есть программа, в которой реализован список объектов, создающиеся динамически. Перед вами функция, которая получает указатель на один из...

Удаление объектов GDI - C++
Почему нужно удалять созданные (например так: hRgn = CreateRectRgn(0, 0, 0, 0); ) объекты GDI? ну то есть зачем их удалять явно?...

Удаление из вектора нескольких объектов - C++
Собственно как удалить несколько объектов из вектора, имея индексы/итераторы, ведь при удалении первого объекта придется пройтись по всем...

Создание/удаление объектов класса - C++
Имеется следующий код: cow.h #ifndef COW_H #define COW_H class Cow { private: char name; char * hobby;


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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