Qt的智能指针

本文介绍了Qt中的三种智能指针QPointer、QScopedPointer和QSharedDataPointer。QPointer提供对QObject及其派生类的保护,防止变成野指针;QScopedPointer在作用域结束时自动删除对象;QSharedDataPointer则是一种计数型智能指针,支持对象共享,并在引用计数为0时销毁对象。这三种智能指针在Qt开发中有着不同的应用场景。
摘要由CSDN通过智能技术生成

 

QPointer

QPointer属于Qt对象模型的特性,本质是一个模板类,它为QObje提供了guarded pointer。当其指向的对象(必须是QObject及其派生类)被销毁时,它会被自动置NULL,原理是其对象析构时会执行QObject的析构函数,进而执行QObjectPrivate::clearGuards(this);,这也是基于其指向对象都继承自QObject的原因。

QPointer对QMetaObject的相关操作做了简单的封装,这里的基本思想是
在QPointer构造的时候调用QMetaObject::addGuard(&o),把T的指针加入QMetaObject内的一个哈希表中,
在QPointer析构的时候调用QMetaObject::removeGuard(&o),把T的指针从哈希表中删除。

QPointer<Test> t = new Test();      // Test类必须继承QObject
delete t;   //对象被delete之后,t会自动置NULL,而不会成为悬挂(dangling)的野指针
if(t.isNull())
    qDebug()<<"NULL";

运行后会输出NULL。

实际中,QPointer用于解决这样的问题:在其他地方都用到了某个指针,在这个指针的对象被delete后,将指针置为空,那么其他地方的指针会变为野指针。也就是在C++中有这样的代码:<

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值