析构函数的执行时机
析构函数在对象被销毁时调用,而对象的销毁时机与它所在的内存区域有关。
在所有函数之外创建的对象是全局对象,它和全局变量类似,位于内存分区中的全局数据区,程序在结束执行时会调用这些对象的析构函数。
在函数内部创建的对象是局部对象,它和局部变量类似,位于栈区,函数执行结束时会调用这些对象的析构函数。
new 创建的对象位于堆区,通过 delete 删除时才会调用析构函数;如果没有 delete,析构函数就不会被执行。
#include <iostream>
using namespace std;
class AA
{
public:
int *m_p;
public:
AA()
{
m_p = new int(100);
cout << "AA" << endl;
}
~AA()
{
delete m_p;
cout << "~AA" << endl;
}
};
int main()
{
{
AA a;
}
system("pause");
return 0;
}
输出结果:AA
~AA