gpt4 book ai didi

c++ - QSharedPointer 和 QObject::deleteLater

转载 作者:可可西里 更新时间:2023-11-01 17:10:37 24 4
gpt4 key购买 nike

我遇到这样一种情况,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 等等)有很多开销。有没有更好的解决方案来处理这种情况?

最佳答案

您可以使用QSharedPointer constructor使用 Deleter :

The deleter parameter specifies the custom deleter for this object. The custom deleter is called, instead of the operator delete(), when the strong reference count drops to 0. This is useful, for instance, for calling deleteLater() on a QObject instead:

 QSharedPointer<MyObject> obj =
QSharedPointer<MyObject>(new MyObject, &QObject::deleteLater);

关于c++ - QSharedPointer 和 QObject::deleteLater,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12623690/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com