Auf dieser Seite

QWeakPointer Class

template <typename T> class QWeakPointer

Die Klasse „QWeakPointer“ enthält eine schwache Referenz auf einen Shared Pointer. Mehr...

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

Hinweis: Alle Funktionen dieser Klasse sind reentrant.

Öffentliche Funktionen

QWeakPointer()
QWeakPointer(const QSharedPointer<T> &other)
QWeakPointer(const QWeakPointer<T> &other)
~QWeakPointer()
void clear()
bool isNull() const
QSharedPointer<T> lock() const
(since 6.7) bool owner_before(const QSharedPointer<X> &other) const
(since 6.7) bool owner_before(const QWeakPointer<X> &other) const
(since 6.7) bool owner_equal(const QSharedPointer<X> &other) const
(since 6.7) bool owner_equal(const QWeakPointer<X> &other) const
(since 6.7) size_t owner_hash() const
void swap(QWeakPointer<T> &other)
QSharedPointer<T> toStrongRef() const
operator bool() const
bool operator!() const
QWeakPointer<T> &operator=(const QSharedPointer<T> &other)
QWeakPointer<T> &operator=(const QWeakPointer<T> &other)
QWeakPointer<X> qWeakPointerCast(const QWeakPointer<T> &src)
bool operator!=(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2)
bool operator!=(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2)
bool operator!=(const QWeakPointer<T> &lhs, std::nullptr_t)
bool operator!=(std::nullptr_t, const QWeakPointer<T> &rhs)
bool operator==(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2)
bool operator==(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2)
bool operator==(const QWeakPointer<T> &lhs, std::nullptr_t)
bool operator==(std::nullptr_t, const QWeakPointer<T> &rhs)

Ausführliche Beschreibung

Der QWeakPointer ist eine automatische schwache Referenz auf einen Zeiger in C++, wobei der Template-Parameter ` T ` den Typ des zu verfolgenden Zeigers angibt. Er kann nicht zur direkten Dereferenzierung des Zeigers verwendet werden, dient jedoch dazu, zu überprüfen, ob der Zeiger in einem anderen Kontext gelöscht wurde oder nicht.

QWeakPointer-Objekte können nur durch Zuweisung von einem ` QSharedPointer` erstellt werden.

Es ist wichtig zu beachten, dass QWeakPointer keine automatischen Typumwandlungsoperatoren bereitstellt, um Fehler zu vermeiden. Auch wenn QWeakPointer einen Zeiger nachverfolgt, sollte es nicht selbst als Zeiger betrachtet werden, da es nicht garantiert, dass das Objekt, auf das der Zeiger verweist, gültig bleibt.

Um daher auf den Zeiger zuzugreifen, den QWeakPointer nachverfolgt, müssen Sie ihn zunächst zu einem ` QSharedPointer ` umwandeln und überprüfen, ob das resultierende Objekt null ist oder nicht. ` QSharedPointer ` garantiert, dass das Objekt nicht gelöscht wurde; wenn Sie also ein Objekt erhalten, das nicht null ist, können Sie den Zeiger verwenden. Ein Beispiel finden Sie unter ` QWeakPointer::toStrongRef()`.

Siehe auch QSharedPointer und QScopedPointer.

Dokumentation zu Mitgliedsfunktionen

QWeakPointer::QWeakPointer()

Erstellt einen QWeakPointer, der auf nichts verweist.

QWeakPointer::QWeakPointer(const QSharedPointer<T> &other)

Erstellt einen QWeakPointer, der eine schwache Referenz auf den Zeiger enthält, auf den other verweist.

Wenn T ein abgeleiteter Typ des Template-Parameters dieser Klasse ist, führt QWeakPointer eine automatische Typumwandlung durch. Andernfalls wird ein Compilerfehler ausgegeben.

[noexcept] QWeakPointer::QWeakPointer(const QWeakPointer<T> &other)

Erstellt einen QWeakPointer, der eine schwache Referenz auf den Zeiger enthält, auf den other verweist.

Wenn T ein abgeleiteter Typ des Template-Parameters dieser Klasse ist, führt QWeakPointer eine automatische Typumwandlung durch. Andernfalls wird ein Compilerfehler ausgegeben.

QWeakPointer::~QWeakPointer()

Löscht dieses „ QWeakPointer “-Objekt. Der Zeiger, auf den dieses Objekt verweist, wird nicht gelöscht.

void QWeakPointer::clear()

Löscht dieses „ QWeakPointer “-Objekt und hebt dabei den Verweis auf, den es möglicherweise auf den Zeiger hatte.

bool QWeakPointer::isNull() const

Gibt „ true “ zurück, wenn dieses Objekt auf „ nullptr “ verweist.

Beachten Sie, dass aufgrund der Natur schwacher Referenzen der Zeiger, auf den QWeakPointer verweist, jederzeit zu nullptr werden kann, sodass sich der von dieser Funktion zurückgegebene Wert von einem Aufruf zum nächsten von „false“ zu „true“ ändern kann.

QSharedPointer<T> QWeakPointer::lock() const

Entspricht ` toStrongRef()`.

Diese Funktion wird aus Gründen der API-Kompatibilität mit std::weak_ptr bereitgestellt.

[noexcept, since 6.7] template <typename X> bool QWeakPointer::owner_before(const QSharedPointer<X> &other) const

[noexcept, since 6.7] template <typename X> bool QWeakPointer::owner_before(const QWeakPointer<X> &other) const

Gibt „ true “ genau dann zurück, wenn dieser Smart-Pointer in einer implementierungsabhängigen, eigentümerbasierten Reihenfolge vor „ other “ steht. Die Reihenfolge ist so festgelegt, dass zwei Smart-Pointer als gleichwertig gelten, wenn sie beide leer sind oder wenn sie beide dasselbe Objekt besitzen (auch wenn ihr scheinbarer Typ und ihr Zeiger unterschiedlich sind).

Diese Funktionen wurden in Qt 6.7 eingeführt.

Siehe auch owner_equal.

[noexcept, since 6.7] template <typename X> bool QWeakPointer::owner_equal(const QSharedPointer<X> &other) const

[noexcept, since 6.7] template <typename X> bool QWeakPointer::owner_equal(const QWeakPointer<X> &other) const

Gibt „ true “ zurück, genau dann, wenn dieser Smart-Pointer und „ other “ sich das Eigentumsrecht teilen.

Diese Funktionen wurden in Qt 6.7 eingeführt.

Siehe auch „ owner_before “ und „ owner_hash “.

[noexcept, since 6.7] size_t QWeakPointer::owner_hash() const

Gibt einen eigentümerbasierten Hash-Wert für dieses Smart-Pointer-Objekt zurück. Smart-Pointer, die (gemäß owner_equal) als gleich angesehen werden, weisen einen identischen eigentümerbasierten Hash auf.

Diese Funktionen wurden in Qt 6.7 eingeführt.

Siehe auch owner_equal.

[noexcept] void QWeakPointer::swap(QWeakPointer<T> &other)

Ersetzt diese Instanz eines schwachen Zeigers durch other. Dieser Vorgang ist sehr schnell und schlägt niemals fehl.

QSharedPointer<T> QWeakPointer::toStrongRef() const

Wandelt diese schwache Referenz in eine starke um und gibt ein ` QSharedPointer `-Objekt zurück, das diese Referenz enthält. Bei der Umwandlung in eine ` QSharedPointer`-Referenz prüft diese Funktion, ob das Objekt bereits gelöscht wurde oder nicht. Ist dies nicht der Fall, erhöht diese Funktion die Referenzanzahl des gemeinsam genutzten Objekts und stellt so sicher, dass es nicht gelöscht wird.

Da es dieser Funktion möglicherweise nicht gelingt, eine gültige starke Referenz auf das gemeinsam genutzte Objekt zu erhalten, sollten Sie stets überprüfen, ob die Konvertierung erfolgreich war, indem Sie QSharedPointer::isNull() für das zurückgegebene Objekt aufrufen.

Der folgende Code wandelt beispielsweise eine „ QWeakPointer “, die gehalten wurde, in eine starke Referenz um und gibt bei Erfolg den Wert der gehaltenen Ganzzahl aus:

QWeakPointer<int> weakref;

// ...

QSharedPointer<int> strong = weakref.toStrongRef();
if (strong)
    qDebug() << "The value is:" << *strong;
sonst
    qDebug() << "The value has already been deleted";

Siehe auch QSharedPointer::QSharedPointer().

QWeakPointer::operator bool() const

Gibt „ true “ zurück, wenn der enthaltene Zeiger nicht „ nullptr “ ist. Diese Funktion eignet sich für die Verwendung in „ if-constructs “, beispielsweise:

if (weakref) { /*...*/ }

Beachten Sie, dass aufgrund der Natur schwacher Referenzen der Zeiger, auf den QWeakPointer verweist, jederzeit zu nullptr werden kann, sodass sich der von dieser Funktion zurückgegebene Wert von einem Aufruf zum nächsten von „true“ zu „false“ ändern kann.

Siehe auch ` isNull()`.

bool QWeakPointer::operator!() const

Gibt „ true “ zurück, wenn dieses Objekt auf „ nullptr “ verweist. Diese Funktion eignet sich für die Verwendung in „ if-constructs “, beispielsweise:

if (!weakref) { /*...*/ }

Beachten Sie, dass aufgrund der Natur schwacher Referenzen der Zeiger, auf den QWeakPointer verweist, jederzeit zu nullptr werden kann, sodass sich der von dieser Funktion zurückgegebene Wert von einem Aufruf zum nächsten von „false“ zu „true“ ändern kann.

Siehe auch isNull().

QWeakPointer<T> &QWeakPointer::operator=(const QSharedPointer<T> &other)

Lässt dieses Objekt den Zeiger von ` other` gemeinsam nutzen. Die aktuelle Zeigerreferenz wird verworfen, aber nicht gelöscht.

Wenn „ T “ ein abgeleiteter Typ des Vorlagenparameters dieser Klasse ist, führt „ QWeakPointer “ eine automatische Typumwandlung durch. Andernfalls wird ein Compilerfehler ausgegeben.

[noexcept] QWeakPointer<T> &QWeakPointer::operator=(const QWeakPointer<T> &other)

Lässt dieses Objekt den Zeiger von ` other` gemeinsam nutzen. Die aktuelle Zeigerreferenz wird verworfen, aber nicht gelöscht.

Wenn „ T “ ein abgeleiteter Typ des Vorlagenparameters dieser Klasse ist, führt „ QWeakPointer “ eine automatische Typumwandlung durch. Andernfalls wird ein Compilerfehler ausgegeben.

Verwandte Nicht-Mitglieder

template <typename X, typename T> QWeakPointer<X> qWeakPointerCast(const QWeakPointer<T> &src)

Gibt einen schwachen Zeiger auf den von ` src` gehaltenen Zeiger zurück, der in den Typ ` X` umgewandelt wurde. Die Typen ` T ` und ` X ` müssen zu derselben Hierarchie gehören, damit ` static_cast ` erfolgreich ausgeführt werden kann.

Beachten Sie, dass X dieselben cv-Qualifizierer (const und volatile) aufweisen muss wie T, da der Code sonst nicht kompiliert werden kann. Verwenden Sie qSharedPointerConstCast, um die „const“-Eigenschaft aufzuheben.

template <typename T, typename X> bool operator!=(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2)

Gibt „ true “ zurück, wenn „ ptr1 “ und „ ptr2 “ auf unterschiedliche Zeiger verweisen.

Wenn sich der Template-Parameter von ` ptr2` von dem von ` ptr1` unterscheidet, versucht ` QSharedPointer `, eine automatische Typumwandlung ( static_cast ) durchzuführen, um sicherzustellen, dass die verglichenen Zeiger gleich sind. Wenn der Template-Parameter von ` ptr2` kein Basis- oder abgeleiteter Typ von ` ptr1` ist, wird ein Compilerfehler ausgegeben.

template <typename T, typename X> bool operator!=(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2)

Gibt „ true “ zurück, wenn „ ptr1 “ und „ ptr2 “ auf unterschiedliche Zeiger verweisen.

Wenn sich der Template-Parameter von ` ptr2` von dem von ` ptr1` unterscheidet, versucht ` QSharedPointer `, eine automatische Typumwandlung ( static_cast ) durchzuführen, um sicherzustellen, dass die verglichenen Zeiger gleich sind. Wenn der Template-Parameter von ` ptr2` kein Basis- oder abgeleiteter Typ von ` ptr1` ist, wird ein Compilerfehler ausgegeben.

template <typename T> bool operator!=(const QWeakPointer<T> &lhs, std::nullptr_t)

Gibt „ true “ zurück, wenn „ lhs “ auf einen gültigen (d. h. nicht-null) Zeiger verweist.

Siehe auch QWeakPointer::isNull().

template <typename T> bool operator!=(std::nullptr_t, const QWeakPointer<T> &rhs)

Gibt „ true “ zurück, wenn „ rhs “ auf einen gültigen (d. h. nicht-null) Zeiger verweist.

Siehe auch QWeakPointer::isNull().

template <typename T, typename X> bool operator==(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2)

Gibt „ true “ zurück, wenn „ ptr1 “ und „ ptr2 “ auf denselben Zeiger verweisen.

Wenn sich der Vorlagenparameter von ` ptr2` von dem von ` ptr1` unterscheidet, versucht ` QSharedPointer `, eine automatische Typumwandlung ( static_cast ) durchzuführen, um sicherzustellen, dass die verglichenen Zeiger gleich sind. Wenn der Vorlagenparameter von ` ptr2` kein Basis- oder abgeleiteter Typ von ` ptr1` ist, wird ein Compilerfehler ausgegeben.

template <typename T, typename X> bool operator==(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2)

Gibt „ true “ zurück, wenn „ ptr1 “ und „ ptr2 “ auf denselben Zeiger verweisen.

Wenn sich der Template-Parameter von ` ptr2` von dem von ` ptr1` unterscheidet, versucht ` QSharedPointer `, eine automatische Typumwandlung ( static_cast ) durchzuführen, um sicherzustellen, dass die verglichenen Zeiger gleich sind. Wenn der Template-Parameter von ` ptr2` kein Basis- oder abgeleiteter Typ von ` ptr1` ist, wird ein Compilerfehler ausgegeben.

template <typename T> bool operator==(const QWeakPointer<T> &lhs, std::nullptr_t)

Gibt „ true “ zurück, wenn „ lhs “ auf „ nullptr “ verweist.

Siehe auch QWeakPointer::isNull().

template <typename T> bool operator==(std::nullptr_t, const QWeakPointer<T> &rhs)

Gibt „ true “ zurück, wenn „ rhs “ auf „ nullptr “ verweist.

Siehe auch QWeakPointer::isNull().

© 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.