C++ 如果析构函数被调用两次,为什么我的程序不会崩溃
代码如下:C++ 如果析构函数被调用两次,为什么我的程序不会崩溃,c++,C++,代码如下: #include <iostream> using namespace std; class A { public: A() {} ~A() { cout << "in destructor" << endl; } }; void main() { A a; a.~A(); } 如果被破坏的对象再次被破坏,为什么我的应用程序不会崩溃?C++标准,第§12.4节[析构函数] 一旦为对
#include <iostream>
using namespace std;
class A
{
public:
A() {}
~A()
{
cout << "in destructor" << endl;
}
};
void main()
{
A a;
a.~A();
}
如果被破坏的对象再次被破坏,为什么我的应用程序不会崩溃?C++标准,第§12.4节[析构函数] 一旦为对象调用析构函数,该对象就不再存在如果为生命周期已结束的对象调用析构函数,则该行为未定义(3.8)。[示例:如果显式调用自动对象的析构函数,并且随后以通常调用对象隐式销毁的方式保留块,则行为未定义 所以你的程序有未定义的行为,它现在可能崩溃,以后,永远不会,地球可能停止旋转等等…不要这样做 注意:
必须是void main()
int main()
必须是void main()
int main()
C++标准第§12.4节[析构函数] 一旦为对象调用析构函数,该对象就不再存在;如果为生命周期已结束的对象调用析构函数,则行为未定义(3.8)。[示例:如果显式调用自动对象的析构函数,并且随后以通常调用对象隐式销毁的方式保留块,则行为未定义 所以你的程序有未定义的行为,它现在可能崩溃,以后,永远不会,地球可能停止旋转等等…不要这样做 注意:
main
定义了两个签名,并声明任何其他签名都是由confo允许的RING编译器必须有一个返回类型的<代码> int <代码>。我希望我们永远不知道如何通过在C++中破坏对象来停止地球的旋转:)OTALE测试问题,它的答案只有以下的变型:<代码> 0 B 1 C 2 D。ode>你现在真的应该停止阅读那些测试了,去买一些好书。为什么你必须通过那项测试?有没有办法跟测试人员讲道理?你能就糟糕的问题对结果提出上诉吗?@Narek:因为标准是这样说的:它为main
定义了两个签名,并声明任何其他签名都是符合标准的co允许的mpiler的返回类型必须为int
。
in destructor
in destructor