Sur cette page

QWeakPointer Class

template <typename T> class QWeakPointer

La classe `QWeakPointer` contient une référence faible vers un pointeur partagé. En savoir plus...

En-tête : #include <QWeakPointer>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core

Remarque : toutes les fonctions de cette classe sont réentrantes.

Fonctions publiques

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)

Description détaillée

Le QWeakPointer est une référence faible automatique à un pointeur en C++, où le paramètre de modèle T spécifie le type du pointeur suivi. Il ne peut pas être utilisé pour déréférencer directement le pointeur, mais il permet de vérifier si le pointeur a été supprimé ou non dans un autre contexte.

Les objets QWeakPointer ne peuvent être créés que par affectation à partir d’un QSharedPointer.

Il est important de noter que QWeakPointer ne fournit aucun opérateur de transtypage automatique afin d’éviter toute erreur. Même si QWeakPointer suit un pointeur, il ne doit pas être considéré comme un pointeur en soi, car il ne garantit pas que l’objet pointé reste valide.

Par conséquent, pour accéder au pointeur suivi par QWeakPointer, vous devez d’abord le convertir en QSharedPointer et vérifier si l’objet obtenu est nul ou non. La fonction QSharedPointer garantit que l’objet n’est pas supprimé ; ainsi, si vous obtenez un objet non nul, vous pouvez utiliser le pointeur. Voir QWeakPointer::toStrongRef() pour un exemple.

Voir également QSharedPointer et QScopedPointer.

Documentation sur les fonctions membres

QWeakPointer::QWeakPointer()

Crée un QWeakPointer qui ne pointe vers rien.

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

Crée un QWeakPointer contenant une référence faible au pointeur référencé par ` other`.

Si T est un type dérivé du paramètre de modèle de cette classe, QWeakPointer effectuera une conversion automatique. Dans le cas contraire, vous obtiendrez une erreur de compilation.

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

Crée un QWeakPointer contenant une référence faible vers le pointeur indiqué par other.

Si T est un type dérivé du paramètre de modèle de cette classe, QWeakPointer effectuera un transtypage automatique. Dans le cas contraire, vous obtiendrez une erreur de compilation.

QWeakPointer::~QWeakPointer()

Supprime cet objet de type « QWeakPointer ». Le pointeur référencé par cet objet ne sera pas supprimé.

void QWeakPointer::clear()

Efface cet objet ` QWeakPointer `, en supprimant la référence qu'il pouvait avoir vers le pointeur.

bool QWeakPointer::isNull() const

Renvoie ` true ` si cet objet fait référence à ` nullptr`.

Notez qu'en raison de la nature des références faibles, le pointeur auquel QWeakPointer fait référence peut devenir nullptr à tout moment ; ainsi, la valeur renvoyée par cette fonction peut passer de « faux » à « vrai » d'un appel à l'autre.

QSharedPointer<T> QWeakPointer::lock() const

Identique à ` toStrongRef()`.

Cette fonction est fournie pour assurer la compatibilité de l'API avec std::weak_ptr.

[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

Renvoie « true » si et seulement si ce pointeur intelligent précède « other » dans un ordre défini par l'implémentation et basé sur la propriété. Cet ordre est tel que deux pointeurs intelligents sont considérés comme équivalents s'ils sont tous deux vides ou s'ils possèdent tous deux le même objet (même si leur type apparent et leur pointeur sont différents).

Ces fonctions ont été introduites dans Qt 6.7.

Voir également 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

Renvoie ` true ` si et seulement si ce pointeur intelligent et ` other ` partagent la propriété.

Ces fonctions ont été introduites dans Qt 6.7.

Voir également owner_before et owner_hash.

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

Renvoie une valeur de hachage basée sur le propriétaire pour cet objet pointeur intelligent. Les pointeurs intelligents qui sont considérés comme égaux (conformément à owner_equal) auront un hachage basé sur le propriétaire identique.

Ces fonctions ont été introduites dans Qt 6.7.

Voir également owner_equal.

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

Remplace cette instance de pointeur faible par other. Cette opération est très rapide et ne rencontre jamais d'échec.

QSharedPointer<T> QWeakPointer::toStrongRef() const

Convertit cette référence faible en référence forte et renvoie un objet de type ` QSharedPointer ` contenant cette référence. Lors de la conversion en ` QSharedPointer`, cette fonction vérifie si l'objet a déjà été supprimé ou non. Si ce n'est pas le cas, elle augmente le compteur de références de l'objet partagé, garantissant ainsi qu'il ne sera pas supprimé.

Étant donné que cette fonction peut ne pas parvenir à obtenir une référence forte valide vers l’objet partagé, vous devez toujours vérifier si la conversion a réussi, en appelant ` QSharedPointer::isNull()` sur l’objet renvoyé.

Par exemple, le code suivant convertit une QWeakPointer qui était détenue en une référence forte et, en cas de réussite, affiche la valeur de l’entier qui était détenu :

QWeakPointer<int> weakref;

// ...

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

Voir également QSharedPointer::QSharedPointer().

QWeakPointer::operator bool() const

Renvoie ` true ` si le pointeur contenu n'est pas ` nullptr`. Cette fonction est adaptée à une utilisation dans ` if-constructs`, comme par exemple :

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

Notez qu’en raison de la nature des références faibles, le pointeur auquel QWeakPointer fait référence peut devenir nullptr à tout moment ; la valeur renvoyée par cette fonction peut donc passer de vrai à faux d’un appel à l’autre.

Voir également isNull().

bool QWeakPointer::operator!() const

Renvoie true si cet objet fait référence à nullptr. Cette fonction est adaptée à une utilisation dans if-constructs, par exemple :

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

Notez qu’en raison de la nature des références faibles, le pointeur auquel QWeakPointer fait référence peut devenir nullptr à tout moment ; la valeur renvoyée par cette fonction peut donc passer de « false » à « true » d’un appel à l’autre.

Voir également isNull().

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

Fait en sorte que cet objet partage le pointeur de ` other`. La référence au pointeur actuel est ignorée, mais n'est pas supprimée.

Si T est un type dérivé du paramètre de modèle de cette classe, QWeakPointer effectuera une conversion automatique. Dans le cas contraire, vous obtiendrez une erreur de compilation.

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

Fait en sorte que cet objet partage le pointeur de ` other`. La référence au pointeur actuel est ignorée, mais n'est pas supprimée.

Si T est un type dérivé du paramètre de modèle de cette classe, QWeakPointer effectuera une conversion automatique. Dans le cas contraire, vous obtiendrez une erreur de compilation.

Éléments non membres associés

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

Renvoie un pointeur faible vers le pointeur contenu dans ` src`, converti en type ` X`. Les types ` T ` et ` X ` doivent appartenir à une même hiérarchie pour que la fonction ` static_cast ` aboutisse.

Notez que ` X ` doit posséder les mêmes qualificatifs cv (const et volatile) que ` T `, sinon la compilation échouera. Utilisez ` qSharedPointerConstCast ` pour supprimer le caractère `const`.

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

Renvoie « true » si « ptr1 » et « ptr2 » font référence à des pointeurs distincts.

Si le paramètre de modèle de ` ptr2` est différent de celui de ` ptr1`, ` QSharedPointer ` tentera d'effectuer une static_cast ion automatique afin de s'assurer que les pointeurs comparés sont égaux. Si le paramètre de modèle de ` ptr2` n'est ni un type de base ni un type dérivé de celui de ` ptr1`, vous obtiendrez une erreur de compilation.

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

Renvoie « true » si « ptr1 » et « ptr2 » font référence à des pointeurs distincts.

Si le paramètre de modèle de ` ptr2` est différent de celui de ` ptr1`, ` QSharedPointer ` tentera d'effectuer une static_cast ion automatique afin de s'assurer que les pointeurs comparés sont égaux. Si le paramètre de modèle de ` ptr2` n'est ni un type de base ni un type dérivé de celui de ` ptr1`, vous obtiendrez une erreur de compilation.

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

Renvoie ` true ` si ` lhs ` désigne un pointeur valide (c'est-à-dire non nul).

Voir également QWeakPointer::isNull().

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

Renvoie ` true ` si ` rhs ` est un pointeur valide (c'est-à-dire non nul).

Voir également QWeakPointer::isNull().

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

Renvoie true si ptr1 et ptr2 pointent vers le même pointeur.

Si le paramètre de modèle de ` ptr2` est différent de celui de ` ptr1`, ` QSharedPointer ` tentera d'effectuer une static_cast ion automatique pour s'assurer que les pointeurs comparés sont égaux. Si le paramètre de modèle de ` ptr2` n'est ni un type de base ni un type dérivé de celui de ` ptr1`, vous obtiendrez une erreur de compilation.

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

Renvoie « true » si « ptr1 » et « ptr2 » pointent vers le même pointeur.

Si le paramètre de modèle de ` ptr2` est différent de celui de ` ptr1`, ` QSharedPointer ` tentera d'effectuer une static_cast ion automatique pour s'assurer que les pointeurs comparés sont égaux. Si le paramètre de modèle de ` ptr2` n'est ni un type de base ni un type dérivé de celui de ` ptr1`, vous obtiendrez une erreur de compilation.

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

Renvoie ` true ` si ` lhs ` fait référence à ` nullptr`.

Voir également QWeakPointer::isNull().

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

Renvoie « true » si « rhs » renvoie à « nullptr ».

Voir également 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.