Как явным образом вызвать деструктор класса в Turbo C++
Я пытаюсь вызвать деструктор класса явно в Turbo C++:
A a;
a.~A();
Но он показывает ошибку:
Ожидается идентификатор члена.
Существует ли способ явного вызова деструктора в Turbo C++?
5 ответов:
Из этой ссылки, кажется, вы действительно можете это сделать, допустимый формат:
Но у меня нет под рукой компилятора Turbo C++ для его тестирования, так что вам придется его протестировать.A a; // a.~A(); // Wrong - Member identifier expected a.A::~A(); // Valid
[Edit]
ОП протестировал его, он работает.
Вам не нужно вызывать деструктор явно, когда объект с
automatic duration
выходит из области видимости, его деструктор будет вызван неявно.void main() { A a; //a.~A(); // you need to comment out this line } // a.~A() is called again, you try to destroy an object twice.
Хотя @billz прав, что вам не нужно вызывать его явно, сама строка должна быть допустимой. Деструктор-это обычный метод, и его можно вызвать подобным образом. Это может быть полезно, если вы реализуете свои собственные
Проблема, которая приводит к сообщению об ошибке, по-видимому, заключается в том, что у вас слишком старый компилятор, о чем свидетельствуютoperator new
иoperator delete
, но в вашем случае просто придерживайтесь ответа billz.<iostream.h>
илиvoid main()
. Исправление старой школы-вещи (но неa.~A();
) код компилируется с GCC 4.8.
Согласно Вашему требованию, следующий код работает хорошо
#include <iostream> class A { public: A() { } ~A() { std::cout<<"\n ~A()"; } }; int main() { A a; a.A::~A(); return 0; }
Но остерегайтесь явного вызова Д'Тора. Потому что компилятор вставит код для автоматического obejcts, которые находятся внутри функции. В приведенном выше коде результатом будет вызов D'Tor дважды т. е.
int main() { A a; a.A::~(); //which we provided a.A::~(); // provided by the compiler for auto objects return 0; }
Мы должны явно вызвать D'Tor только для оператора placment new здесь для более подробной информации.
Если компилятор не разрешает стандартный синтаксис для явного вызова деструктора, то он, вероятно, не позволит вам сделать это.
Вашему компилятору около двадцати лет, и с тех пор язык прошел по крайней мере две серьезные ревизии. У меня недостаточно исторических знаний (или интереса), чтобы знать, допускает ли его диалект явное разрушение; но если вы хотите написать современный(ish) C++, вам понадобится современный(ish) компилятор.