以下代码为:
#include <iostream>
using namespace std;
class A
{
public:
A() {}
~A()
{
cout << "in destructor" << endl;
}
};
void main()
{
A a;
a.~A();
}
具有以下输出:
in destructor
in destructor
为什么我的应用程序在被破坏的对象再次被破坏时不会崩溃?
答案 0 :(得分:6)
C ++标准,第12.4节[析构函数]
为对象调用析构函数后,该对象不再存在; 如果为生命周期结束的对象调用析构函数,则行为未定义(3.8)。 [示例:如果显式调用自动对象的析构函数,并且该块随后以通常调用对象的隐式销毁的方式保留,则行为未定义。
所以你的程序有未定义的行为,它现在可能会崩溃,之后,永远不会,地球可以停止旋转等等......不要这样做。
注意:强>
void main()
必须为int main()