簡體   English   中英

QEnableSharedFromThis :: sharedFromThis()返回nullptr

[英]QEnableSharedFromThis::sharedFromThis() returns nullptr

我有一個class MyClass ,應該可以將包裝在QSharedPointer<MyClass>

根據我的理解(和經驗),簡單地創建QSharedPointer<MyClass>(this)新實例是QSharedPointer<MyClass>(this) 相反,完成我想要的操作的正確方法是讓MyClassQEnableSharedFromThis<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM