QEnableSharedFromThis::sharedFromThis() returns nullptr



我有一个class MyClass应该能够返回这个包装在QSharedPointer<MyClass>中。

我的理解(和经验)是,简单地创建新的QSharedPointer<MyClass>(this)实例不是要走的路。相反,完成我想要的正确方法是让MyClass继承QEnableSharedFromThis<MyClass>以提供成员函数sharedFromThis()

此成员函数应返回包装QSharedPointer<MyClass>中的内容,而不会产生否则会发生的所有不良副作用。

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>中。

我是QEnableSharedFromThis新手,我想知道我是否缺少什么,或者可能是什么原因造成的?

根据官方文档:

一个基类,它允许为已由共享指针管理的对象的 QSharedPointer 获取。当您需要从类的任何实例创建 QSharedPointer 时,可以继承此类;例如,从对象本身内部。

因此,您需要将指针实例化为智能指针:

QSharedPointer<MyClass> mc(new MyClass());
mc->testSharedThis();

或者在您的情况下,对Qt Smart T指针使用等效的std::make_shared:

QSharedPointer<MyClass> mc = QSharedPointer<MyClass>::create();
mc->testSharedThis();

相关内容

  • 没有找到相关文章

最新更新