MFC应用程序,在处理函数中创建的对象,在处理函数结束后该对象会被清除吗?
就比如说APP的InitInstance函数,如果在其中创建一个CXXDlg类的对象。。这个对象不会被清除吧?被清除的话这个程序就没有用了啊?可是不清楚的话这个对象是th...
就比如说APP的InitInstance函数,如果在其中创建一个CXXDlg类的对象。。这个对象不会被清除吧?被清除的话这个程序就没有用了啊?可是不清楚的话这个对象是theApp的成员吗? 还是其它的什么关系?
再或者说在某一个函数中创建CPaintDC类的对象,它会随函数结束而被结束吗? 展开
再或者说在某一个函数中创建CPaintDC类的对象,它会随函数结束而被结束吗? 展开
3个回答
展开全部
会清除,确切地讲是会执行析构函数,但是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的消息窗口和“叮”
析构函数最常见的是在调用他的语句块结束时调用
新建一个工程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的消息窗口和“叮”
析构函数最常见的是在调用他的语句块结束时调用
展开全部
在某一个函数中创建的对象、变量会随着这一个函数的结束而被清除。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果是值对象,会在函数声明周期结束自动释放,如果是指针new在堆里的,需要手动delete的。创建CXXDlg对象通常用值对象即可。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询