我遇到了这样一种情况:一个由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
这种方法可以很好地解决问题,但使用这种方法会有很多开销(例如分配一个新的 QObject
等)。有没有更好的解决方案来处理这种情况?