Qt中的智能指针

Qt中的智能指针_第1张图片
引用计数原理的两种衍生的机制:显式共享和隐式共享。
显式共享:从使用者的角度看,从头到尾资源只有一份,一个地方修改了,另一个地方就能读取到修改后的资源。
隐式共享:从使用者的角度看,每个使用者都像是拥有独立的一份资源。在一个地方修改,修改的只是原始资源的拷贝,不会影响原始资源的内容,自然就不会影响到其他使用者。所以这种共享方式称为隐式共享。
强(智能)指针:Qt中的强指针实现类是:QSharedPointer,此类是模板类,可以指向多种类型的数据,主要用来管理堆内存。它的原理和显式共享一样:最后使用的地方负责释放删除资源,如类对象、内存块。强指针中的“强”,是指每多一个使用者,引用计数都会老老实实地+1。
弱(智能)指针:Qt中的弱指针实现类是QWeakPointer,此类亦为模板类,可以指向多种类型的数据,同样主要用来管理堆内存。弱指针只能从强指针QSharedPointer转化而来,获取弱指针,不增加引用计数,它只是一个强指针的观察者,观察而不干预。只要强指针存在,弱指针也可以转换成强指针。可见弱指针和强指针是一对形影不离的组合,通常结合起来使用
局部指针:局部指针,是一种超出作用域自动删除、释放堆内存、对象的工具。它结合了栈内存管理和堆内存管理的优点。Qt中的实现类有:QScopedPointer,QScopedArrayPointer。
观察者指针:观察者是指仅仅做查询作用的指针,不会影响到引用计数。Qt中的观察者指针是QPointer,它必须指向QObject的子类对象,才能对对象生命周期进行观察。因为只有QObject子类才会在析构的时候通知QPointer已失效。QPointer是防止悬挂指针(即野指针)的有效手段,因为所指对象一旦被删除,QPointer会自动置空,在使用时,判断指针是否为空即可,不为空说明对象可以使用,不会产生内存访问错误的问题。

你可能感兴趣的:(Qt,qt,c++,开发语言)