MFC 非模态对话框 关闭 会不会调用变量的析构函数?

问题描述

MFC 非模态对话框 关闭 会不会调用变量的析构函数?

我有一个子对话框,头文件中声明了变量a。
例如a是一个队列。
使用a的过程中,会不断动态申请新空间。
队列a是有析构函数的。

如果是局部变量,局部函数运行完后,队列可以自动调用析构函数。
但上述例子,关闭对话框后,却没有响应a的析构函数。

注,我重载了onclose。如果不能自动析构,我打算在里面手动析构a。

但我不太理解,为什么关闭对话框,析构函数不自动调用?
还有要注意什么别的问题……

解决方案

是否调用析构函数取决于这个对话框对象变量的生存周期。如果定义在函数里,函数退出就会调用。如果定义在类成员里,这个对象析构后会调用。如果是全局变量,程序退出才会。

解决方案二:

如果是指针类型,那么调用delete的时候会调用。所以建议你用指针。

时间: 2024-10-02 22:53:45

MFC 非模态对话框 关闭 会不会调用变量的析构函数?的相关文章

VC MFC非模态对话框的实现方法_C 语言

众所周知的,MFC中非模态对话框在显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切换.本文就来给大家讲解一下非模态对话框的实现方法: 一.非模态对话框的对话框资源和对话框类 实际上,模态对话框和非模态对话框在创建对话框资源和生成对话框类上是没有区别的,因此,在创建模态对话框时所创建的IDD_TIP_DIALOG对话框资源和CTipDlg类都不需要修改. 二.创建及显示非模态对话框的步骤 需要修改的是,对话框类实例的创建和显示,也就是之前在CAdditionDlg::OnBnCli

MFC非模态对话框销毁

非模态对话框需要重载OnCanel方法, 并调用DestroyWindow, 且不能调用基类的OnCanel重载PostNcDestroy, 需要delete掉this指针 // Overrides    // ClassWizard generated virtual function overrides    //{{AFX_VIRTUAL(CDlgTest)    protected:    virtual void DoDataExchange(CDataExchange* pDX); 

MFC创建模态对话框和非模态对话框的方法_C 语言

在MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box).本文对此分别简述其创建方法. 一.模态对话框(model dialog box) 在程序运行的过程中,若出现了模态对话框,那么主窗口将无法发送消息,直到模态对话框退出才可以发送. 点击模态对话框中的OK按钮,模态对话框会被销毁. 创建一个模态对话框的代码如下所示: //创建一个模态对话框 CTestDialog td; td.DoModal(); 其中C

Mfc在模态对话框上非模态创建listbox焦点问题

问题描述 Mfc在模态对话框上非模态创建listbox焦点问题 在模态对话框上创建一个Gridctrl中每一个Row里会有一个item里additem了一个非模太的listbox控件,在响应item左键单击后会show出这个listbox在listbox的show函数里setfocys一直不起作用,发现焦点一直在最最外层的Dlg里,怎么能够把焦点设置到listbox上 解决方案 看看是不是忘记设置tabstop了.手工按tab有反应么?setfocus的handle参数是否正确. 解决方案二:

mfc-MFC 非模态对话框 编辑框中输入中文出现乱码,求指点!!

问题描述 MFC 非模态对话框 编辑框中输入中文出现乱码,求指点!! 如题中,当前项目所用字符集为UNICODE,多字节字符集也试过,另外对话框和资源文件上都设置了语言为中文,仍为乱码,求解决思路方法!!!跪谢!!木有金币 不大好意思,等会儿我研究研究怎么获得金币在加上悬赏 解决方案 用Richedit控件试试 解决方案二: 对话框属性设置.设置一下属性中的语言试试 解决方案三: 你设置Unicode编码,显示中文应该没有问题,你的操作系统是什么?英文版的?有中文语言包吗?

非模态对话框如何判断我点击的是IDOK按钮

问题描述 非模态对话框如何判断我点击的是IDOK按钮 我想通过单击非模态对话框上的"确定"按钮,实现一些东西,如何判断我单击的就是IDOK按钮 解决方案 MFC:如何判断非模态对话框已经创建了 解决方案二: PreTranslateMsg捕获信息 然后判断控件ID

一个关于非模态对话框的问题

问题描述 privatevoidbutton1_Click(objectsender,EventArgse){InputBoxf=newInputBox();f.ShowDialog();f.Title="输入对话框";f.TipText="请输入年龄";if(f.ShowDialog()==DialogResult.OK){this.label1.Text=f.Message;}}我想问的是为什么我把f.showdialog();这行代码去掉之后就会出现错误呢?在

JS 模态对话框和非模态对话框操作技巧汇总_基础知识

模态窗口 javascript 技巧汇总(传值.打开.刷新) 1.要弹出的页面中,一定要保证<head></head>标签间有<base target="_self">,否则会弹出的模态窗口上,点击按钮时,会再次弹出一个新页面. 2.被弹出页面的按钮的事件处理中,应该有Response.Write(new Function().ClosePage());语句,用以关闭当前的模态窗口. 3.因为幽默的缓存原因,如果你在模态窗口中修改了数据,你会发现,父

关于非模态对话框的创建释放与释放

问题描述 关于非模态对话框的创建释放与释放 创建了一个对话框父窗口为桌面窗口m_pDecorBMapDlg = new CDecorBMapDlg;m_pDecorBMapDlg->Create(CDecorBMapDlg::IDDGetDesktopWindow()); 然后将它销毁m_pDecorBMapDlg->DestroyWindow();SAFE_DELETE(m_pDecorBMapDlg); 然后再创建就出错了 解决方案 再创建是1.m_pDecorBMapDlg = new