Qt的动态内存回收问题(1)

  Qt的动态内存回收机制容易让人觉得困惑,而能够参考的相关资料又很少,不少都是对此一笔带过,或者给出错误的说明。费了不少劲,了解到了一些皮毛。


前言:

程序开始时,最好先把指向动态内存的指针赋值为NULL,在delete这些变量的时候,也将指针赋值为NULL 。这样,可以在程序中,通过判断是否为NULL来判断是否已经分配空间。 


  • 在delete过后,指针变量本身的状态是没有定义的。
  • 在delete指针后立即将其赋值为NULL是经验之举。(在程序初始化(执行new之前)时,也建议将指针赋值为NULL。在new前,可以先判断指针是否为空再决定是不是new ——wulin)
  • 对于一个不是由new返回的空指针实施delete操作会产生未定义的结果。
  • 如果将delete操作实施与一个空指针,则不会产生任何动作也不会有错误。


1、一篇博文

http://www.cppblog.com/biao/archive/2009/07/02/89079.html

在这篇博文中,提到了Qt的窗口回收机制,复制了过来。大家也可以去原网址看。

Qt: 释放窗口资源

1. 对于使用指针,使用new创建的窗口,当然可以使用delete显示的释放其占用的资源:
Widget *w = new Widget();
delete w;

2. 对于使用指针,使用new创建的窗口,还可以使用QWidget::setAttribute方法来当窗口关闭后自动释放其占用的资源,而不用户显示的去调用delete释放,此方法当然也会调用窗口的析构函数:
Widget *w = new Widget();
w->setAttribute(Qt::WA_DeleteOnClose);

(在程序中测试过一次,该值默认值为false,需要通过setAttribute来置为true)

这可以用于非模态对话框,因为非模态对话框如果是用指针形式创建,但是再接着delete的话,窗口就没了,如果不使用delete释放窗口占用的资源,又会赞成泄漏。如果使用普通变量创建,同样的也因为变量作用域马上就结束而窗口也没了,另一种方法就是使用多线程,不过这个的代价大了点。所以这种技术在创建非模态对话框上是非常典型的运用。
测试方式:在Widget中分配大量的内存,显示与关闭多个此类窗口,看看任务管理器里此程序的内存变化情况,是否真正的释放了占用的内存(当然释放了)。在C++中使用new分配内存时,如array = new doub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值