c ++,析构函数有问题

时间:2013-05-16 14:57:30

标签: c++ destructor

我有这样的代码:

#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,并且在程序的末尾必须删除该对象,但它没有。

4 个答案:

答案 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被销毁。