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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
Kravensky
 Аватар для Kravensky
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 24
19.03.2012, 17:26     Можно ли явным образом вызывать деструктор? #1
Например. Имеется перегруженный в классе оператор присваивания:
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 (); )?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
19.03.2012, 17:28     Можно ли явным образом вызывать деструктор? #2
Kravensky, Не стоит явно вызывать деструктор.
Но если очень хочется - то да. Так можно. Но не следует. И если вызывать то this->~square_matrix().
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
19.03.2012, 20:04     Можно ли явным образом вызывать деструктор? #3
В исходниках Qt еще такое видел
C++
1
2
delete this;
this = new className;
Kravensky
 Аватар для Kravensky
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 24
20.03.2012, 11:26  [ТС]     Можно ли явным образом вызывать деструктор? #4
Kastaneda, это если сам объект находится в динамической памяти, как мне кажется. А у меня его элементы.
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
20.03.2012, 11:40     Можно ли явным образом вызывать деструктор? #5
А у меня его элементы.
тогда удаляй элементы отдельным вызовом, зачем городить вызов деструктора и нарушать жизнь объекта?
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 ;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2012, 15:22     Можно ли явным образом вызывать деструктор?
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Kravensky
 Аватар для Kravensky
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 24
20.03.2012, 15:22  [ТС]     Можно ли явным образом вызывать деструктор? #7
villu, уже сделал, спасибо.

LosAngeles, прокомментируй, пожалуйста.
Yandex
Объявления
20.03.2012, 15:22     Можно ли явным образом вызывать деструктор?
Ответ Создать тему
Опции темы

Текущее время: 03:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru