QObject三大职责-内存管理机制

一 QObject三大职责

Qt的内存管理机制,是QObject类的三大职责之一,QObject的另外两个职责为内省和事件处理。

内存管理,简而言之就是你new的控件只要制定了父窗体,就不需要自己去释放,它的父窗体在自己析构时会去自动释放。

二 规则

QT的这套回收内存的机制,主要的规则如下:

  1. 所有继承自QOBJECT类的类,如果在new的时候指定了父亲,那么它的清理时在父亲被delete的时候delete,所以如果一个程序中,所有的QOBJECT类都指定了父亲,那么他们是会一级级的在最上面的父亲清理时被清理,而不用自己清理;
  2. 如果我们自己释放掉设置QObject为自己父亲的类,那个指向的父亲的QObject会从自己的儿子列表把这个儿子的删除掉,就不会出现儿子的内存会被释放两次,如果我们要删除有这种关系的QObject类的话,正常情况,这样它会将这个儿子移出它的列表,并且重新构建显示内容,但是直接这样做时有风险的!
  3. 当一个QOBJECT正在接受事件队列时如果中途被你DELETE掉了,就是出现问题了,所以QT中建议大家不要直接DELETE掉一个 QOBJECT,如果一定要这样做,要使用QOBJECT的deleteLater()函数,它会让所有事件都发送完一切处理好后马上清除这片内存,而且就算调用多次的deletelater也不会有问题。

猜你喜欢

转载自blog.csdn.net/GreedySnaker/article/details/115200283