如果析构函数被调用两次,为什么我的程序不会崩溃

时间:2014-07-16 02:13:35

标签: c++

以下代码为:

#include <iostream>
using namespace std;

class A
{
public:
    A() {}
    ~A()
    {
        cout << "in destructor" << endl;
    }
};
void main()
{
    A a;
    a.~A();
}

具有以下输出:

in destructor
in destructor

为什么我的应用程序在被破坏的对象再次被破坏时不会崩溃?

1 个答案:

答案 0 :(得分:6)

C ++标准,第12.4节[析构函数]

  

为对象调用析构函数后,该对象不再存在; 如果为生命周期结束的对象调用析构函数,则行为未定义(3.8)。 [示例:如果显式调用自动对象的析构函数,并且该块随后以通常调用对象的隐式销毁的方式保留,则行为未定义。

所以你的程序有未定义的行为,它现在可能会崩溃,之后,永远不会,地球可以停止旋转等等......不要这样做。

注意:

  • void main()必须为int main()