总结Qt中三大机制(二):内存管理机制

这篇文章继续来总结关于内存管理的内容。

2.内存管理机制

我们知道C++中并没有什么内存管理机制。对于栈上对象我们无需关心,因为它的空间由系统负责,而堆上对象必须由程序猿负责空间的申请与释放。Qt作为第三方类库,给出了一套很好的内存管理机制。

首先需要明确一个概念,Qt作为一套GUI(图形用户界面)类库,在开发时,我们应用最多的就是各类窗口,其中经常用到父子窗口。必须明确,父子窗口一种窗口之间的组合关系,而不是继承中的父子类关系,两者绝没有任何关系。

Qt中的内存管理:子窗口可以通过指定父窗口的方式,来托管子窗口的内存,而父窗口又可以通过它的父窗口来托管自己的内存,一层一层,顶级窗口(QWidget类对象或者其派生类widgwt对象)一般在main函数中实例化为可以自动销毁空间的栈上对象,这样子窗口的空间就只需手动申请而不用管释放了。其中的底层实现大概是这样:当父窗口释放时,会在析构函数中遍历自己所有的子窗口,将它们释放。

所有的QObject类对象及其派生类对象都可以通过指定父对象来托管内存,QWidget继承自QObject,所以它及其派生类对象能够使用内管管理机制。

那么所有的子对象只能在父对象销毁的时候才能一起销毁,势必会造成内存驻留,能不能自己来销毁呢?当然开发者也可以使用delete来销毁子对象,但是不推荐这种用法,因为QObject对象远比普通的类对象复杂的多,QObject底层实现在我们不知道的情况下,正进行着一些工作。如果这个时候使用delete强制释放,会造成一些不可预知的错误。一般推荐使用deleteLater函数,进行子对象的安全释放,它会等待所有事情都处理完毕后才释放。

[slot] void QObject::deleteLater();

相对来说,内存管理机制是比较简单的一个知识点,在实际开发中也给我们带来了极大的方便。

 

 

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值