[英]QEnableSharedFromThis::sharedFromThis() returns nullptr
我有一个class MyClass
,应该可以将其包装在QSharedPointer<MyClass>
。
根据我的理解(和经验),简单地创建QSharedPointer<MyClass>(this)
新实例是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();
或者在您的情况下,将等效于std :: make_shared用于Qt智能指针:
QSharedPointer<MyClass> mc = QSharedPointer<MyClass>::create();
mc->testSharedThis();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.