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

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

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

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

19.03.2012, 17:26. Просмотров 2114. Ответов 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 (); )?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2012, 17:26     Можно ли явным образом вызывать деструктор?
Посмотрите здесь:

C++ Каким образом можно записать стек и очередь в дек
Можно передавать и вызывать из функции в DLL динамические массивы? C++
Каким образом можно осуществить загрузку файла из интернета по url ? C++
C++ Обязательно ли вызывать деструктор ?
Можно ли задавать условие неравенства вот таким образом C++
C++ Каким образом можно сделать выключение компютера С++
C++ Массив: каким образом можно изменить размер многомерного массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
19.03.2012, 17:28     Можно ли явным образом вызывать деструктор? #2
Kravensky, Не стоит явно вызывать деструктор.
Но если очень хочется - то да. Так можно. Но не следует. И если вызывать то this->~square_matrix().
Kastaneda
Форумчанин
Эксперт С++
 Аватар для Kastaneda
4252 / 2784 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 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++
C++ Почему создается виртуальный деструктор A, а в таблице виртуальных функций лежит деструктор B
C++ Найдите максимальное k, для которого можно соответствующим образом выбрать 2k + 1 день
Можно ли каким-то образом наследовать тип 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     Можно ли явным образом вызывать деструктор?
Ответ Создать тему
Опции темы

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