Auf dieser Seite

QEnableSharedFromThis Class

template <typename T> class QEnableSharedFromThis

Eine Basisklasse, mit der sich ein „ QSharedPointer “ für ein Objekt abrufen lässt, das bereits von einem Shared Pointer verwaltet wird. Mehr...

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

Öffentliche Funktionen

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

Ausführliche Beschreibung

Sie können diese Klasse vererben, wenn Sie eine „ QSharedPointer “-Instanz aus einer beliebigen Instanz einer Klasse erstellen müssen, beispielsweise aus dem Objekt selbst heraus. Der Template-Parameter ` T ` gibt den Typ der Klasse an, die von `QEnableSharedFromThis` erbt. Der entscheidende Punkt ist, dass die Technik, einfach ` QSharedPointer<T>(this)` zurückzugeben, nicht verwendet werden kann, da dies dazu führt, dass mehrere unterschiedliche ` QSharedPointer `-Objekte mit separaten Referenzzählern erstellt werden. Aus diesem Grund dürfen Sie niemals mehr als ein ` QSharedPointer `-Objekt aus demselben Raw-Zeiger erstellen.

QEnableSharedFromThis definiert zwei Memberfunktionen namens „ sharedFromThis()“, die je nach Konstanz „ QSharedPointer<T>“ und „ QSharedPointer<const T>“ für „ this “ zurückgeben:

    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
    }

Es ist auch möglich, einen Shared-Pointer von einem Objekt außerhalb der Klasse selbst abzurufen. Dies ist besonders nützlich in Code, der eine Schnittstelle zu Skripten bereitstellt, wo die Verwendung von Shared-Pointern derzeit nicht möglich ist. Zum Beispiel:

    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> ...
        }
    };

Dokumentation zu Mitgliedsfunktionen

QSharedPointer<T> QEnableSharedFromThis::sharedFromThis()

Wenn „ this “ (d. h. die Instanz der Unterklasse, die diese Methode aufruft) von einem „ QSharedPointer “ verwaltet wird, wird eine Shared-Pointer-Instanz zurückgegeben, die auf „ this “ verweist; andernfalls wird ein Null- QSharedPointer zurückgegeben.

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

Überladung der Konstante „sharedFromThis()“.

Dies ist eine überladene Funktion.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.