这个使用破坏的c ++代码有什么问题?

时间:2016-12-22 16:27:19

标签: c++ destructor turbo-c++

KSIĄŻKA:
TYTUŁ:       "Mały Książe" 
AUTOR:           Antoine de Saint-Exupéry
ROK WYDANIA:         1943 
WYDAWNICTWO:         Zielona Sowa 
GATUNEK:        Nowela
LICZBA STRON:            62 
CENA:       4.99 USD


如果错误而不是它有什么问题?
我试过这个代码在turbo c ++上运行,我仍然得到错误

  

预期在“#include <iostream.h> class a { public: ~a() { cout << 1; } }; int main() { a ob; ob.~a(); return 0; } ”行

的成员标识符

其他猜测输出?

2 个答案:

答案 0 :(得分:4)

通常不会显式调用析构函数。当实例超出范围时,它们将被隐式调用。

两次调用同一实例的析构函数会导致未定义的行为。

虽然现代编译器没有编译器错误。请见here。可能这是Turbo C ++设计人员在错误信息中留下的一个罕见的好决定。

极少数情况下会明确调用析构函数,例如如果您要维护使用placement new创建的实例池。

答案 1 :(得分:2)

通话可能适用于ob.a::~a()

话虽如此,您不需要也不应该显式调用析构函数,一旦ob对象超出范围,就会自动调用它。