0

これをでラップし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()上記の例を実行すると、 thisでラップされているのではなく、sharedFromThis()常にnullptrが返されます。QSharedPointer<MyClass>

私は初めてでQEnableSharedFromThis、欠けているものがあるかどうか疑問に思っていますか、それとも何が原因でしょうか?

4

1 に答える 1