Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Egor138
32 / 13 / 3
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
#1

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

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

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

Добавление и удаление объектов. Рисование объектов на экране
Доброго времени суток. Есть очень интересующий вопрос, как сделать...

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

Удаление объектов класса
Никак не могу понять, как правильно освободить память. Подскажите пожалуйста в...

Создание/удаление объектов
Здравствуйте. На сколько мне известно есть 2 способа создания объекта - с...

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

8
Kuzia domovenok
2208 / 1977 / 440
Регистрация: 25.03.2012
Сообщений: 6,930
Записей в блоге: 1
13.02.2013, 20:09 #2
никак. объекты сами удаляются, когда их время жизни заканчивается.
явный вызов деструктора иногда применяется, но это скорее исключение, чем правило, и у тебя вряд ли эти случаи
1
MrGrig
177 / 160 / 38
Регистрация: 08.10.2012
Сообщений: 422
14.02.2013, 13:19 #3
вообще обычно в деструкторах прописываю очищение памяти из под указателей, выделенной в конструкторе, ну или либо какието другие адэкватные вещи, которые никак не удаляются после того как

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

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

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

Не по теме:

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


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

Не по теме:

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


Цитата Сообщение от daslex Посмотреть сообщение
Вот и разработчики разные, наверное, такого же мнения были... Разработчики разного рода движков интернет-браузеров, некоторых игр и некоторого остального софта, которые память жрут и проц грузят совсем не по-детски.
Я рад, что разработчики со мной согласны. А ты, должно быть, в своих программах ни разу не используешь new и delete, а наоборот, используешь свой самописный менеджер памяти, который память не жрёт, проц не грузит, деструкторы вызывает явно и вообще работает, лучше чем какие-то нубы из Майкрософта могли придумать. "Кому нужны эти new и delete.."
0
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
15.02.2013, 00:03 #7
добавлю сарказм не по делу от непонимания или незнания что явный вызов деструктора, это:
SomeClass::~SomeClass(); а не delete someClassPtr; Врятли тот, кто в состоянии написать
интернет-браузер или игру не умеют работать с памятью. Кроме этого, в нормальном коде стоит стремится к уменьшению количествa явных вызовов delete, предоставив это спец объектам вроде смартпоинтеров. В таких
случаях явных вызов delete не нужен.
0
daslex
1291 / 535 / 177
Регистрация: 02.08.2011
Сообщений: 2,756
15.02.2013, 00:59 #8
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А ты, должно быть
Чего не знаешь - того не говори.
0
Kuzia domovenok
2208 / 1977 / 440
Регистрация: 25.03.2012
Сообщений: 6,930
Записей в блоге: 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
Привет! Вот еще темы с решениями:

Удаление из вектора объектов
Есть вектор, состоящий из объектов какого-то класса. Есть объект...

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

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

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


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

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

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