C++非模态对话框自动销毁的好方法 .

简介: 非模态对话框自动销毁的好方法在进行非模态对话框编程时,由于其需要通过new 一个对话框对象,然后调用Create函数来创建,这就牵涉到何时把对话框delete掉的问题,通过如下方法,可以让你不再担心对话框忘记delete掉而导致的内存泄漏问题。

非模态对话框自动销毁的好方法
在进行非模态对话框编程时,由于其需要通过new 一个对话框对象,然后调用Create函数来创建,这就牵涉到何时把对话框delete掉的问题,通过如下方法,可以让你不再担心对话框忘记delete掉而导致的内存泄漏问题。
1、用ClassWizard在对话框中添加如下虚拟函数
virtual void PostNcDestroy();
这样就有了这样一个函数:
void CAboutDlg::PostNcDestroy()
{
 // TODO: Add your specialized code here and/or call the base class
 delete this;  // 看到这句话没有?是不是很简单,在这里就能直接delete掉自己,释放内存
 CDialog::PostNcDestroy();
}

然后进行常规的非模态对话框创建:
CAboutDlg *pDlg = new CAboutDlg();
pDlg->Create(IDD_ABOUT);
pDlg->ShowWindow(SW_SHOW);


OK,到此为止,非模态对话框创建成功,然后,你就尽情编写其他代码吧,不用再操心这个对话框的内存泄漏问题了,因为他会自己释放自己的内存,看到上面的delete this代码了吗?就是那个其作用。
下面说一下为什么这样能行,我们看看MSDN上怎么说的:
CWnd::PostNcDestroy
This method is called by the default OnNcDestroy method after the window has been destroyed. Derived classes can use this function for custom cleanup such as the deletion of the this pointer.

也就是说,这个函数是一个窗体已经被销毁时被调用的,他是这个窗体所调用的最后一个函数,在这个函数里可以进行一些清理工作,比如delete this指针等等。

目录
相关文章
|
1月前
|
存储 Java C++
C++ 引用和指针:内存地址、创建方法及应用解析
C++中的引用是现有变量的别名,创建时需用`&`运算符,如`string &meal = food;`。指针存储变量的内存地址,使用`*`创建,如`string* ptr = &food;`。引用必须初始化且不可为空,而指针可初始化为空。引用在函数参数传递和提高效率时有用,指针适用于动态内存分配和复杂数据结构操作。选择使用取决于具体需求。
40 9
|
18天前
|
C++
【C++】std::string 转换成非const类型 char* 的三种方法记录
【C++】std::string 转换成非const类型 char* 的三种方法记录
7 0
|
23天前
|
数据安全/隐私保护 C++
C++ 类方法解析:内外定义、参数、访问控制与静态方法详解
C++ 中的类方法(成员函数)分为类内定义和类外定义,用于操作类数据。类内定义直接在类中声明和定义,而类外定义则先在类中声明,再外部定义。方法可以有参数,访问权限可通过 public、private 和 protected 控制。静态方法与类关联,不依赖对象实例,直接用类名调用。了解这些概念有助于面向对象编程。
16 0
|
29天前
|
编译器 C++
C++ 解引用与函数基础:内存地址、调用方法及声明
C++ 中的解引用允许通过指针访问变量值。使用 `*` 运算符可解引用指针并修改原始变量。注意确保指针有效且不为空,以防止程序崩溃。函数是封装代码的单元,用于执行特定任务。理解函数的声明、定义、参数和返回值是关键。函数重载允许同一名称但不同参数列表的函数存在。关注公众号 `Let us Coding` 获取更多内容。
138 1
|
1月前
|
算法 编译器 C++
【C++】C++代码性能优化的方法(全网最适用)
【C++】C++代码性能优化的方法(全网最适用)
|
2月前
|
存储 算法 数据管理
C++中利用随机策略优化二叉树操作效率的实现方法
C++中利用随机策略优化二叉树操作效率的实现方法
77 1
|
2月前
|
消息中间件 缓存 监控
【C++ 观察者模式的应用】跨进程观察者模式实战:结合ZeroMQ和传统方法
【C++ 观察者模式的应用】跨进程观察者模式实战:结合ZeroMQ和传统方法
94 1
|
2月前
|
算法 数据处理 C++
Franca IDL与CommonAPI C++ D-Bus实战教程:方法、信号和属性传递详解
Franca IDL与CommonAPI C++ D-Bus实战教程:方法、信号和属性传递详解
92 0
|
2月前
|
存储 算法 数据库
【C/C++ 数据结构 】树的 四种表示方法
【C/C++ 数据结构 】树的 四种表示方法
31 0
|
2月前
|
存储 安全 算法
【C/C++ 泛型编程 进阶篇】C++中的模板参数与成员访问:多种方法详解
【C/C++ 泛型编程 进阶篇】C++中的模板参数与成员访问:多种方法详解
53 0