QWeakPointer Class

template <typename T> class QWeakPointer

Die Klasse QWeakPointer enthält eine schwache Referenz auf einen gemeinsamen Zeiger. Mehr...

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

Hinweis: Alle Funktionen in 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
bool 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)

Detaillierte Beschreibung

Der QWeakPointer ist eine automatische schwache Referenz auf einen Zeiger in C++. Er kann nicht verwendet werden, um den Zeiger direkt zu derefenzieren, aber er kann verwendet werden, um zu überprüfen, ob der Zeiger in einem anderen Kontext gelöscht wurde oder nicht.

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

Es ist wichtig zu beachten, dass QWeakPointer keine automatischen Casting-Operatoren anbietet, um Fehler zu vermeiden. Auch wenn QWeakPointer einen Zeiger verfolgt, sollte er nicht als Zeiger selbst betrachtet werden, da er nicht garantiert, dass das Objekt, auf das er zeigt, gültig bleibt.

Um auf den von QWeakPointer verfolgten Zeiger zuzugreifen, müssen Sie ihn daher zunächst nach QSharedPointer befördern und überprüfen, ob das resultierende Objekt null ist oder nicht. QSharedPointer garantiert, dass das Objekt nicht gelöscht wird, wenn Sie also ein Objekt erhalten, das nicht null ist, können Sie den Zeiger verwenden. Siehe QWeakPointer::toStrongRef() für ein Beispiel.

Siehe auch QSharedPointer und QScopedPointer.

Dokumentation der Mitgliedsfunktionen

[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 nur dann zurück, wenn dieser Smart Pointer in einer implementierungsdefinierten, besitzerbasierten Reihenfolge vor other steht. Die Reihenfolge ist so, dass zwei intelligente Zeiger als äquivalent betrachtet werden, wenn sie beide leer sind oder wenn sie beide dasselbe Objekt besitzen (selbst wenn ihr offensichtlicher Typ und Zeiger unterschiedlich sind).

Diese Funktion wurde 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, wenn und nur wenn dieser Smart Pointer und other denselben Eigentümer haben.

Diese Funktion wurde 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 Owner-basierten Hash-Wert für dieses Smart-Pointer-Objekt zurück. Smart Pointer, die gleich verglichen werden (gemäß owner_equal), haben einen identischen Owner-basierten Hash-Wert.

Diese Funktion wurde in Qt 6.7 eingeführt.

Siehe auch owner_equal.

QWeakPointer::QWeakPointer()

Erzeugt einen QWeakPointer, der auf nichts zeigt.

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

Erzeugt einen QWeakPointer, der eine schwache Referenz auf den von other referenzierten Zeiger enthält.

Wenn T ein abgeleiteter Typ des Template-Parameters dieser Klasse ist, führt QWeakPointer einen automatischen Cast durch. Andernfalls erhalten Sie einen Compilerfehler.

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

Erzeugt einen QWeakPointer, der eine schwache Referenz auf den von other referenzierten Zeiger enthält.

Wenn T ein abgeleiteter Typ des Template-Parameters dieser Klasse ist, führt QWeakPointer einen automatischen Cast durch. Andernfalls erhalten Sie einen Compilerfehler.

QWeakPointer::~QWeakPointer()

Zerstört dieses QWeakPointer Objekt. Der Zeiger, auf den dieses Objekt verweist, wird nicht gelöscht.

void QWeakPointer::clear()

Löscht dieses QWeakPointer Objekt, wobei der Verweis, den es möglicherweise auf den Zeiger hatte, gelöscht wird.

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, so dass 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

Dasselbe wie toStrongRef().

Diese Funktion ist für die API-Kompatibilität mit std::weak_ptr vorgesehen.

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

Tauscht diese schwache Zeigerinstanz mit other aus. Dieser Vorgang ist sehr schnell und schlägt nie fehl.

QSharedPointer<T> QWeakPointer::toStrongRef() const

Erhöht diesen schwachen Verweis auf einen starken Verweis und gibt ein QSharedPointer Objekt zurück, das diesen Verweis enthält. Bei der Umwandlung in QSharedPointer prüft diese Funktion, ob das Objekt bereits gelöscht wurde oder nicht. Ist dies nicht der Fall, erhöht diese Funktion die Anzahl der Verweise auf das gemeinsam genutzte Objekt und stellt damit sicher, dass es nicht gelöscht wird.

Da diese Funktion keine gültige starke Referenz auf das gemeinsam genutzte Objekt erhalten kann, sollten Sie immer überprüfen, ob die Umwandlung erfolgreich war, indem Sie QSharedPointer::isNull() für das zurückgegebene Objekt aufrufen.

Der folgende Code wandelt beispielsweise eine gehaltene QWeakPointer 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().

bool 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, wie:

    if (weakref) { ... }

Beachten Sie, dass aufgrund der Natur von schwachen Referenzen der Zeiger, auf den QWeakPointer verweist, jederzeit zu nullptr werden kann, so dass 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, wie:

    if (!weakref) { ... }

Beachten Sie, dass aufgrund der Natur von schwachen Referenzen der Zeiger, auf den QWeakPointer verweist, jederzeit zu nullptr werden kann, so dass 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 Template-Parameters dieser Klasse ist, wird QWeakPointer einen automatischen Cast durchführen. Andernfalls erhalten Sie einen Compilerfehler.

[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 Template-Parameters dieser Klasse ist, wird QWeakPointer einen automatischen Cast durchführen. Andernfalls erhalten Sie einen Compilerfehler.

Verwandte Nicht-Mitglieder

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

Gibt einen schwachen Zeiger auf den Zeiger zurück, der von src gehalten wird, gecastet auf den Typ X. Die Typen T und X müssen zu einer Hierarchie gehören, damit static_cast erfolgreich ist.

Beachten Sie, dass X die gleichen cv-qualifiers (const und volatile) haben muss wie T, sonst lässt sich der Code nicht kompilieren. Verwenden Sie qSharedPointerConstCast, um die Konstanten zu beseitigen.

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 static_cast durchzuführen, um sicherzustellen, dass die verglichenen Zeiger gleich sind. Wenn der Template-Parameter von ptr2 kein Basistyp oder ein von ptr1 abgeleiteter Typ ist, erhalten Sie einen Compilerfehler.

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 static_cast durchzuführen, um sicherzustellen, dass die verglichenen Zeiger gleich sind. Wenn der Template-Parameter von ptr2 kein Basistyp oder ein von ptr1 abgeleiteter Typ ist, erhalten Sie einen Compilerfehler.

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 leeren) 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 leeren) 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 Template-Parameter von ptr2 von dem von ptr1 unterscheidet, versucht QSharedPointer, einen automatischen static_cast durchzuführen, um sicherzustellen, dass die verglichenen Zeiger gleich sind. Wenn der Template-Parameter von ptr2 kein Basistyp oder ein von ptr1 abgeleiteter Typ ist, erhalten Sie einen Compilerfehler.

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, einen automatischen static_cast durchzuführen, um sicherzustellen, dass die verglichenen Zeiger gleich sind. Wenn der Template-Parameter von ptr2 kein Basistyp oder ein von ptr1 abgeleiteter Typ ist, erhalten Sie einen Compilerfehler.

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().

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