c++的析构函数有问题

c++, have problems with destructor

本文关键字:有问题 析构函数 c++      更新时间:2023-10-16

我的代码是:

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

由于它是在堆栈上分配的,因此应该在这里调用析构函数:

int main()
{
    X x(3);
    system("PAUSE");
    return 0;
} // X destructor (x go out of context)

析构函数在对象超出作用域时运行。我猜你放system("pause")是为了看它的信息。不,x的范围还没有结束,它在return 0;之后结束。

从终端运行你的程序,你自己看看。

析构函数只有在对象超出作用域时才会被调用,而直到退出main时才会被调用。

这就是为什么消息没有弹出:控制台在对象消失的时候消失了

试试这个:

int main()
{
    {
       X x(3);
    } // Your x object is being destroyed here
    system("PAUSE");
    return 0;
}

它将为X创建一个局部作用域,因此您将看到X被销毁。