首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QEnableSharedFromThis::sharedFromThis()返回nullptr

QEnableSharedFromThis::sharedFromThis()返回nullptr
EN

Stack Overflow用户
提问于 2017-12-10 01:21:18
回答 1查看 592关注 0票数 0

我有一个class MyClass,它应该能够返回这个用QSharedPointer<MyClass>包装的

根据我的理解(和经验),简单地创建QSharedPointer<MyClass>(this)的新实例并不是一条路。相反,实现我想要的结果的正确方法是让MyClassQEnableSharedFromThis继承来提供成员函数sharedFromThis()

这个成员函数应该返回,这个封装在QSharedPointer<MyClass>中,而不会出现所有的不良副作用。

代码语言:javascript
复制
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的新手,我想知道我是不是遗漏了什么,或者是什么原因呢?

EN

回答 1

Stack Overflow用户

发布于 2017-12-10 01:57:06

根据正式文件:

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

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

代码语言:javascript
复制
QSharedPointer<MyClass> mc(new MyClass());
mc->testSharedThis();

或者,在您的示例中,使用与std::make_shared等效的Qt智能指针:

代码语言:javascript
复制
QSharedPointer<MyClass> mc = QSharedPointer<MyClass>::create();
mc->testSharedThis();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47734973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档