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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
Kravensky
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 24
#1

Можно ли явным образом вызывать деструктор? - C++

19.03.2012, 17:26. Просмотров 2687. Ответов 6
Метки нет (Все метки)

Например. Имеется перегруженный в классе оператор присваивания:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
square_matrix square_matrix::operator= (square_matrix matrix)
{
    if (coefficents_set != NULL)
        ~square_matrix ();
    
    order = matrix.order;
    get_matrix_memory ();
    
    if (!indication)
        for (int i = 0; i <= order - 1; i++)
            for (int j = 0; j <= order - 1; j++)
                coefficents_set [i] [j] = matrix.coefficents_set [i] [j];
    
    return *this;
}
В левой части присваивания может находиться объект, которому ранее была выделена динамическая память. В этом случае до следующих действий её надо освободить. Допустимо ли для этого использовать непосредственно деструктор? Если да, его вызов имеет форму обычной функции ( в приведённом выше примере - ~square_matrix (); )?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2012, 17:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Можно ли явным образом вызывать деструктор? (C++):

Обязательно ли вызывать деструктор ? - C++
Привет всем =) Обязательно ли вызывать деструктор ? Например, в std::cin буфер сбрасывается сам, а в std::cout его необходимо...

Можно передавать и вызывать из функции в DLL динамические массивы? - C++
Мне нужно создать перегруженные функции удаления элемента из динамического массива с заданным ключом!Можно передавать в функцию и вызывать...

Можно ли один раз создать функцию в потоке, а потом просто вызывать ее - C++
Не ругайтесь, я искал, не нашел ответа на такой вопрос. Я вот использую потоки следующим образом: void поток(){ while(true){ ...

какой можно к этой программе написать деструктор - C++
l9FS5aWT_y4 пишу по этому видео и на 24 минуте он говорит что можно что-то вписать в деструктор приведите пример пожалуйста, в коде...

Почему создается виртуальный деструктор A, а в таблице виртуальных функций лежит деструктор B - C++
Почему я делаю виртуальным деструктор A, а в таблице виртуальных функций лежит деструктор B?

В каких случаях классы в С++ подключаются с явным указанием папки? - C++
в каких случаях классы в c++ подключаются с явным указанием папки? #include &quot;Class01.h&quot; // &lt;&lt; обычное подключение #include...

6
ForEveR
В астрале
Эксперт С++
7985 / 4744 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
19.03.2012, 17:28 #2
Kravensky, Не стоит явно вызывать деструктор.
Но если очень хочется - то да. Так можно. Но не следует. И если вызывать то this->~square_matrix().
1
Kastaneda
Jesus loves me
Эксперт С++
4703 / 2907 / 239
Регистрация: 12.12.2009
Сообщений: 7,405
Записей в блоге: 2
Завершенные тесты: 1
19.03.2012, 20:04 #3
В исходниках Qt еще такое видел
C++
1
2
delete this;
this = new className;
0
Kravensky
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 24
20.03.2012, 11:26  [ТС] #4
Kastaneda, это если сам объект находится в динамической памяти, как мне кажется. А у меня его элементы.
0
villu
203 / 204 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
20.03.2012, 11:40 #5
А у меня его элементы.
тогда удаляй элементы отдельным вызовом, зачем городить вызов деструктора и нарушать жизнь объекта?
0
LosAngeles
Заблокирован
20.03.2012, 13:39 #6
C++
1
2
3
4
5
6
7
8
const C& C:: operator =( const C& other )
{
  if ( this != & other ) {
     this ->~C (); / / lifetime of *this ends
     new ( this ) C( other ); / / new object of type C created
   }
   return * this ;
}
0
Kravensky
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 24
20.03.2012, 15:22  [ТС] #7
villu, уже сделал, спасибо.

LosAngeles, прокомментируй, пожалуйста.
0
20.03.2012, 15:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2012, 15:22
Привет! Вот еще темы с ответами:

Каким образом можно сделать выключение компютера С++ - C++
Появилась идея сделать интересную программу. Всё уже продумал кроме выключения ПК. То есть каким образом заставить ПК выключится после...

Можно ли каким-то образом наследовать тип bool - C++
Здраствуйте, можно ли каким то образом наследовать тип bool типо что бы 1 - man типо что бы 0 - woman что то в таком роде: class...

Каким образом можно записать стек и очередь в дек - C++
Прошу помощи. Есть программа создания стека и очереди с динамическим распределением памяти. Каким образом их можно записать в дек?Заранее...

Можно ли задавать условие неравенства вот таким образом - C++
Можно ли задавать условие неравенства вот таким образом? if (k==17&amp;&amp; a!=a!=a!=a!=a!=a!=a!=a!=a!=a)


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

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

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