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

What is wrong with this c++ code using destruction?

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


如果错了它有什么问题?
我已经在 Turbo C++ 上试过这段代码 运行,我仍然得到 [=13 的错误=]

member identifier expected at "ob.~a();"line


否则猜输出结果?

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

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


尽管如此,现代编译器没有编译器错误。请参阅 here。可能这是 Turbo C++ 设计者在错误消息中留下这样的罕见的好决定之一。


很少有显式调用析构函数的情况,例如如果您要维护使用 placement new.

创建的实例池

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

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