我有一个 class MyClass
应该能够返回包裹在 QSharedPointer<MyClass>
中的 this .
根据我的理解(和经验),简单地创建 QSharedPointer<MyClass>(this)
的新实例不是要走的路。相反,完成我想要的事情的正确方法是让 MyClass
继承自 QEnableSharedFromThis<MyClass>
提供成员函数sharedFromThis()
.
这个成员函数应该返回包裹在QSharedPointer<MyClass>
中的this没有否则会发生的所有不良副作用。
class MyClass : public QEnableSharedFromThis<MyClass>
{
/* ... */
public:
void testSharedThis()
{
auto sp=QEnableSharedFromThis<MyClass>::sharedFromThis();
if(sp.isNull()){
qWarning()<<"SHARED POINTER TO *this* WAS NULL!";
}
}
};
void main(){
MyClass *mc=new MyClass;
mc->testSharedThis();
}
但是当我运行 testSharedThis()
在上面的示例中,sharedFromThis()
总是返回 nullptr 而不是包裹在 QSharedPointer<MyClass>
中的 this .
我是 QEnableSharedFromThis
的新手我想知道我是否遗漏了什么,或者这可能是什么原因造成的?
最佳答案
根据官方文档:
A base class that allows obtaining a QSharedPointer for an object already managed by a shared pointer. You can inherit this class when you need to create a QSharedPointer from any instance of a class; for instance, from within the object itself.
所以你需要将你的指针实例化为智能指针:
QSharedPointer<MyClass> mc(new MyClass());
mc->testSharedThis();
或者在您的情况下,对 Qt 智能指针使用与 std::make_shared 等效的方法:
QSharedPointer<MyClass> mc = QSharedPointer<MyClass>::create();
mc->testSharedThis();
关于c++ - QEnableSharedFromThis::sharedFromThis() 返回 nullptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47734973/