c++中的析构函数问题

来源:百度知道 编辑:UC知道 时间:2024/06/02 18:36:06
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout<<"constructor"<<endl;
}
int display()
{
cout<<"display"<<endl;
return 1;
}
~A()
{
cout<<"distructor"<<endl;
}
};
A b;
int main()
{
b.display();
return 0;
}
为什么这个程序的析构函数没有显示

#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout<<"constructor"<<endl;
}
int display()
{
cout<<"display"<<endl;
return 1;
}
~A()
{
cout<<"distructor"<<endl;
}
};

int main()
{
A *a=new A();
delete a;
return 0;
} 这样就显示了 之前那个函数都返回了 所以对象的回收是操作系统完成的 这样就析构结果就不显示了

这里因为你把析构函数交给系统调用的,实际上是在return 0之后的那个}调用的析构函数。这时候当然不会显示了。
尝试看看用指针,然后再调一下delete这个指针就能看到了。

就像 kidpeng所写的那样。。。。。

析构时候,程序已经返回了,你没有看到结果

你定义的类A的对象b是全局变量,在系统中有一块独立的存储空间,它的分配和回收由系统控制,所以程序结束了但你没看到析构的那一步。