MFC应用程序,在处理函数中创建的对象,在处理函数结束后该对象会被清除吗?

2024-12-19 21:30:45
推荐回答(3个)
回答1:

会清除,确切地讲是会执行析构函数,但是InitInstance有点细微的区别,我们做个试验
新建一个工程1,默认,在默认生成的dlg类中头文件加~CMy1Dlg(); cpp文件中加
CMy1Dlg::~CMy1Dlg()
{
AfxMessageBox(_T("1"));
}
AfxMessageBox这个函数是弹出一个窗口,等待用户按回车,理论上这个程序运行后关掉时会弹出一个有文字“1”的窗口,但事实是没有弹出,但是没有弹出不代表没有运行析构函数,因为 AfxMessageBox这个函数不同于MessageBox,他在弹窗口的同时会发出“叮”的一声,再试一下,关闭的时候虽然没有弹窗口,但是有“叮”,这就可以理解为运行了析构函数,但是不完全,因为这时跟整个程序的资源已经销毁了,所以不会再弹窗了,但是至于为什么还有声音我就不是很了解了。windows程序都是一次性的,因为是遵循析构函数的法则,语句结束就销毁
会,这个就不会有问题了,在刚才工程中加一个按钮,然后再1dlg头文件中建一个类
class a
{
public:
int b;
a()
{
b=1;
}
~a()
{
b=0;
AfxMessageBox(_T("da"));
}
};
双击按钮,在单击消息中加入代码 a aa;
运行程序,单击一下按钮,会正常弹出da的消息窗口和“叮”
析构函数最常见的是在调用他的语句块结束时调用

回答2:

在某一个函数中创建的对象、变量会随着这一个函数的结束而被清除。

回答3:

如果是值对象,会在函数声明周期结束自动释放,如果是指针new在堆里的,需要手动delete的。创建CXXDlg对象通常用值对象即可。