我有这样的代码:
#include <iostream>
using namespace std;
class X
{
int a;
public:
X()
{
cout<<"X constructor was called"<<endl;
}
X(int n)
{
cout<<"X(int) constructor was called"<<endl;
}
~X(){cout<<"X dectructor was called"<<endl;}
};
int main()
{
X x(3);
system("PAUSE");
return 0;
}
此代码执行的结果是:调用了X(int)构造函数。 但为什么没有打印析构函数消息呢?
据我所知,我们通过调用构造函数X(int)来创建对象x,并且在程序的末尾必须删除该对象,但它没有。
答案 0 :(得分:3)
由于它是在堆栈上分配的,因此应该在这里调用析构函数:
int main()
{
X x(3);
system("PAUSE");
return 0;
} // X destructor (x go out of context)
答案 1 :(得分:2)
当对象超出范围时运行析构函数。我猜你让system("pause")
看到它的消息。好吧,x
的范围尚未结束,它在return 0;
之后结束。
从终端运行您的程序并亲自查看。
答案 2 :(得分:1)
在对象超出范围之前不会调用析构函数,并且在退出main 之前不会发生。
这就是弹出消息的原因:当对象消失时,控制台就消失了。
答案 3 :(得分:1)
试试这个:
int main()
{
{
X x(3);
} // Your x object is being destroyed here
system("PAUSE");
return 0;
}
它将为X创建一个本地范围,以便您看到X被销毁。