QEnableSharedFromThis Class

template <typename T> class QEnableSharedFromThis

すでに共有ポインターで管理されているオブジェクトのQSharedPointer を取得するための基底クラスです。詳細...

Header: #include <QEnableSharedFromThis>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

パブリック関数

QSharedPointer<T> sharedFromThis()
QSharedPointer<const T> sharedFromThis() const

詳細説明

あるクラスのインスタンスからQSharedPointer を作成する必要がある場合、このクラスを継承することができる。重要な点は、QSharedPointer<T>(this)をただ返すというテクニックは使えないということです。これは、別々の参照カウントを持つ、複数の異なるQSharedPointer オブジェクトを作ってしまうことになるからです。このため、同じ未加工ポインタからQSharedPointer

thisQEnableSharedFromThisは、QSharedPointer<T>とQSharedPointer<const T>を返すsharedFromThis()と呼ばれる2つのメンバ関数を定義しています(constnessによって異なります):

    class Y: public QEnableSharedFromThis<Y>
    {
    public:
        QSharedPointer<Y> f()
        {
            return sharedFromThis();
        }
    };

    int main()
    {
        QSharedPointer<Y> p(new Y());
        QSharedPointer<Y> y = p->f();
        Q_ASSERT(p == y); // p and q must share ownership
    }

クラス自身の外部にあるオブジェクトから共有ポインタを取得することも可能です。これは、スクリプトへのインタフェースを提供するコードで特に有用で、現在のところ共有ポインタを使用することはできません。例えば

    class ScriptInterface : public QObject
    {
        Q_OBJECT

        // ...

    public slots:
        void slotCalledByScript(Y *managedBySharedPointer)
        {
            QSharedPointer<Y> yPtr = managedBySharedPointer->sharedFromThis();
            // Some other code unrelated to scripts that expects a QSharedPointer<Y> ...
        }
    };

メンバ関数ドキュメント

QSharedPointer<T> QEnableSharedFromThis::sharedFromThis()

this QSharedPointer (つまり、このメソッドを呼び出しているサブクラスのインスタンス)が によって管理されている場合は、 を指す共有ポインタ・インスタンスを返します。QSharedPointer this

QSharedPointer<const T> QEnableSharedFromThis::sharedFromThis() const

これはオーバーロードされた関数です。

sharedFromThis() の定数オーバーロード。

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。