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

就比如说APP的InitInstance函数,如果在其中创建一个CXXDlg类的对象。。这个对象不会被清除吧?被清除的话这个程序就没有用了啊?可是不清楚的话这个对象是th... 就比如说APP的InitInstance函数,如果在其中创建一个CXXDlg类的对象。。这个对象不会被清除吧?被清除的话这个程序就没有用了啊?可是不清楚的话这个对象是theApp的成员吗? 还是其它的什么关系?
再或者说在某一个函数中创建CPaintDC类的对象,它会随函数结束而被结束吗?
展开
 我来答
zhccsd
2012-11-18 · TA获得超过4042个赞
知道大有可为答主
回答量:1347
采纳率:66%
帮助的人:914万
展开全部
会清除,确切地讲是会执行析构函数,但是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的消息窗口和“叮”
析构函数最常见的是在调用他的语句块结束时调用
liff0710
2012-11-18 · 超过18用户采纳过TA的回答
知道答主
回答量:75
采纳率:0%
帮助的人:44万
展开全部
在某一个函数中创建的对象、变量会随着这一个函数的结束而被清除。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cathynol
2012-11-20 · 超过15用户采纳过TA的回答
知道答主
回答量:47
采纳率:100%
帮助的人:36.3万
展开全部
如果是值对象,会在函数声明周期结束自动释放,如果是指针new在堆里的,需要手动delete的。创建CXXDlg对象通常用值对象即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式