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

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

Войти
Регистрация
Восстановить пароль
 
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
#1

Деструктор (опасность удаления) - C++

04.07.2012, 15:21. Просмотров 432. Ответов 5
Метки нет (Все метки)

Насколько опасно в деструкторе напрямую прописывать delete this?
C++
1
2
3
4
5
6
7
8
9
10
11
12
class MyClass
{
int a, b;
AnotherClass* c;
public : static int mas[10];
...
~MyClass()
{
//delete[] c;
delete this;
}
}
Я так понимаю, что эта конструкция подчистит все, включая и int a, b, и статический массив? Должна по крайней мере..
.. Случайно отправил раньше времени.
Вот в чем дело, удаление статического массива у меня происходит через раз, если у меня имеется два экземпляра класса, хотя удаляться он не должен. При этом, иногда, массив не удаляется, но !перемещается в памяти! (в watch адрес первого элемента валяется), а иногда, как уже сказал, затирается полностью. Причем в программе ничего такого нет, ибо она для эксперимента, кроме того, что я выше написал, ещё конструктор, другой класс с элементом char без деструктора и заполнение статического массива, и всё :<
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2012, 15:21     Деструктор (опасность удаления)
Посмотрите здесь:

В чем опасность Double-Checked Locking (параллельное прогр-е) - C++
В учебнике Энтони Уильямса &quot;Параллельное программирование на C++&quot; описана проблема при использовании блокировки с двойной проверкой...

Деструктор - C++
Вроде все просто но чето никак не работает Задача: Написать программу в которой Конструктор класса MyCl выводит сообщение на...

Деструктор - C++
В каком случае необходимо явно определять деструктор?

Деструктор - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #define _CRTDBG_MAP_ALLOC #include &lt;crtdbg.h&gt; using namespace std; class list{ ...

Нужен ли деструктор? - C++
Вопрос туп, но что-то переклинило, извиняйте. Делаю в Qt. class A { QList&lt;int&gt;* list public: A() { list = new...

конструктор и деструктор - C++
Почему деструктор не вызывается? #include &lt;iostream.h&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; class myclass{ float a; ...

деструктор класса - C++
Здравствуйте! Я скопировал код отсюда https://msdn.microsoft.com/ru-ru/library/6t4fe76c.aspx себе в Visual Studio 2015, после...

Не вызывается деструктор - C++
_Здравствуйте. Я новичок в программировании, сейчас изучаю самостоятельно С++ по книге Джесса Либерти. При разборе одного из примеров...

Зацикливается деструктор - C++
Здравствуйте :) Очень прошу ограничиться ответом на мой вопрос, если Вы его знаете, и приберечь на другой раз советы использовать готовые...

реализовать деструктор - C++
Конструкторов у структуры может быть несколько. Для строки может оказаться полезным заполняющий конструктор (например, чтобы создать строку...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
04.07.2012, 15:24     Деструктор (опасность удаления) #2
nexen, Выстрел в ногу, ага. delete вызывает в том числе деструктор класса. Результат я думаю понятен?
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
04.07.2012, 15:25     Деструктор (опасность удаления) #3
http://www.parashift.com/c++-faq-lit...html#faq-16.15
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
04.07.2012, 15:31     Деструктор (опасность удаления) #4
Цитата Сообщение от nexen Посмотреть сообщение
эта конструкция подчистит все, включая и int a, b, и статический массив? Должна по крайней мере..
Статические переменные не являются полями класса и при уничтожении объектов никуда не деваются.
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
04.07.2012, 15:41     Деструктор (опасность удаления) #5
Jupiter, Ну не для деструктора же)
Jupiter
04.07.2012, 16:05     Деструктор (опасность удаления)
  #6

Не по теме:

ForEveR, сбило с толку

You must be absolutely 100% positively sure that the rest of your member function (after the delete this line) doesn't touch any piece of this object (including calling any other member functions or touching any data members).

Yandex
Объявления
04.07.2012, 16:05     Деструктор (опасность удаления)
Ответ Создать тему
Опции темы

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