ath*_*e0z 8 c++ qt shared-ptr qobject qsharedpointer
我有一种情况,QSharedPointer
托管对象发出信号表明它已经完成了它的目的,并且很快就准备好删除了(执行后离开函数发出我的readyForDeletion
信号).使用普通指针时,我只是调用QObject::deleteLater
该对象,但是对于一个QSharedPointer
管理实例来说这是不可能的.我的解决方法如下:
template<typename T>
class QSharedPointerContainer : public QObject
{
QSharedPointer<T> m_pSharedObj;
public:
QSharedPointerContainer(QSharedPointer<T> pSharedObj)
: m_pSharedObj(pSharedObj)
{} // ==> ctor
}; // ==> QSharedPointerContainer
template<typename T>
void deleteSharedPointerLater(QSharedPointer<T> pSharedObj)
{
(new QSharedPointerContainer<T>(pSharedObj))->deleteLater();
} // ==> deleteSharedPointerLater
Run Code Online (Sandbox Code Playgroud)
这很好用,但是使用这种方法有很多开销(分配一个新的QObject
等等).有没有更好的解决方案来处理这种情况?
pne*_*zis 18
您可以使用QSharedPointer
构造与Deleter
:
deleter参数指定此对象的自定义删除器.当强引用计数降为0时,将调用自定义删除器,而不是运算符delete().例如,在QObject上调用deleteLater()时,这很有用:
QSharedPointer<MyObject> obj =
QSharedPointer<MyObject>(new MyObject, &QObject::deleteLater);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4236 次 |
最近记录: |