Sur cette page

QExplicitlySharedDataPointer Class

template <typename T> class QExplicitlySharedDataPointer

La classe QExplicitlySharedDataPointer représente un pointeur sur un objet explicitement partagé. Plus d'informations...

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

Cette classe est fortement comparable.

Cette classe est fortement comparable à T* et std::nullptr_t.

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

Types publics

Fonctions publiques

QExplicitlySharedDataPointer()
QExplicitlySharedDataPointer(T *data)
QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<X> &o)
QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<T> &o)
QExplicitlySharedDataPointer(QExplicitlySharedDataPointer<T> &&o)
~QExplicitlySharedDataPointer()
const T *constData() const
T *data() const
void detach()
(since 6.0) T *get() const
(since 6.0) void reset(T *ptr = nullptr)
void swap(QExplicitlySharedDataPointer<T> &other)
T *take()
operator bool() const
bool operator!() const
T &operator*() const
T *operator->()
T *operator->() const
QExplicitlySharedDataPointer<T> &operator=(QExplicitlySharedDataPointer<T> &&other)
QExplicitlySharedDataPointer<T> &operator=(T *o)
QExplicitlySharedDataPointer<T> &operator=(const QExplicitlySharedDataPointer<T> &o)

Fonctions protégées

T *clone()
bool operator!=(const QExplicitlySharedDataPointer<T> &lhs, const QExplicitlySharedDataPointer<T> &rhs)
bool operator!=(const T *const &lhs, const QExplicitlySharedDataPointer<T> &rhs)
bool operator==(const QExplicitlySharedDataPointer<T> &lhs, const QExplicitlySharedDataPointer<T> &rhs)
bool operator==(const T *const &lhs, const QExplicitlySharedDataPointer<T> &rhs)

Description détaillée

QExplicitlySharedDataPointer<T> facilite l'écriture de vos propres classes explicitement partagées. QExplicitlySharedDataPointer implémente un comptage de références à l'abri des threads, garantissant que l'ajout de QExplicitlySharedDataPointers à vos classes réentrantes ne les rendra pas non réentrantes.

À l'exception d'une grande différence, QExplicitlySharedDataPointer est identique à QSharedDataPointer. La grande différence est que les fonctions membres de QExplicitlySharedDataPointer n' effectuent pas la copie automatique sur l' opération d'écriture (detach()) que les membres non-const de QSharedDataPointer effectuent avant d'autoriser la modification de l'objet de données partagées. Il existe une fonction detach(), mais si vous voulez vraiment detach(), vous devez l'appeler vous-même. Cela signifie que les pointeurs QExplicitlySharedDataPointers se comportent comme des pointeurs C++ ordinaires, sauf qu'en effectuant un comptage de références et en ne supprimant pas l'objet de données partagées tant que le comptage de références n'est pas égal à 0, ils évitent le problème des pointeurs pendants.

Il est instructif de comparer QExplicitlySharedDataPointer avec QSharedDataPointer à l'aide d'un exemple. Considérons la classe Employee example dans QSharedDataPointer, modifiée pour utiliser le partage explicite comme expliqué dans la discussion Implicit vs Explicit Sharing.

Notez que si vous utilisez cette classe mais que vous appelez souvent detach(), vous devriez probablement utiliser QSharedDataPointer à la place.

Dans la documentation des fonctions membres, d pointer fait toujours référence au pointeur interne de l'objet de données partagées.

Voir également QSharedData et QSharedDataPointer.

Documentation sur les types de membres

QExplicitlySharedDataPointer::Type

Il s'agit du type d'objet de données partagées. Le pointeur d pointe sur un objet de ce type.

Documentation des fonctions membres

[noexcept] QExplicitlySharedDataPointer::QExplicitlySharedDataPointer()

Construit un QExplicitlySharedDataPointer initialisé avec nullptr comme pointeur d.

[explicit noexcept] QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(T *data)

Construit un QExplicitlySharedDataPointer avec un pointeur d défini sur data et incrémente le nombre de références de data.

[noexcept] template <typename X> QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<X> &o)

Ce constructeur de copie est différent en ce sens qu'il permet à o d'être un type différent de pointeur de données explicitement partagées, mais qui possède un objet de données partagées compatible.

Par défaut, le pointeur d de o (de type X *) est implicitement converti au type T *; le résultat de cette conversion est défini comme le pointeur d de this, et le nombre de références de l'objet de données partagées est incrémenté.

[noexcept] QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<T> &o)

Ce constructeur de copie standard associe le pointeur d de this au pointeur d de o et incrémente le nombre de références de l'objet de données partagées.

[noexcept] QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(QExplicitlySharedDataPointer<T> &&o)

Move-construit une instance de QExplicitlySharedDataPointer, en la faisant pointer sur le même objet que o.

QExplicitlySharedDataPointer::~QExplicitlySharedDataPointer()

Diminue le nombre de références de l'objet de données partagées. Si le nombre de références devient 0, l'objet de données partagées est supprimé. Celui-ci est alors détruit.

[protected] T *QExplicitlySharedDataPointer::clone()

Crée et renvoie une copie profonde des données actuelles. Cette fonction est appelée par detach() lorsque le nombre de références est supérieur à 1 afin de créer la nouvelle copie. Cette fonction utilise l'opérateur new et appelle le constructeur de copie du type T.

Voir QSharedDataPointer<T>::clone() pour une explication de son utilisation.

[noexcept] const T *QExplicitlySharedDataPointer::constData() const

Renvoie un pointeur constant vers l'objet de données partagées.

Voir aussi data().

[noexcept] T *QExplicitlySharedDataPointer::data() const

Renvoie un pointeur sur l'objet de données partagées.

void QExplicitlySharedDataPointer::detach()

Si le nombre de références de l'objet de données partagées est supérieur à 1, cette fonction crée une copie profonde de l'objet de données partagées et place le pointeur d de cet objet sur la copie.

Parce que QExplicitlySharedDataPointer n'effectue pas de copie automatique sur les opérations d'écriture comme le font les membres de QSharedDataPointer, detach() n' est pas appelé automatiquement dans les fonctions membres de cette classe. Si vous constatez que vous appelez detach() partout dans votre code, envisagez d'utiliser QSharedDataPointer à la place.

[noexcept, since 6.0] T *QExplicitlySharedDataPointer::get() const

Identique à data(). Cette fonction est fournie pour la compatibilité STL.

Cette fonction a été introduite dans Qt 6.0.

[noexcept, since 6.0] void QExplicitlySharedDataPointer::reset(T *ptr = nullptr)

Définit le pointeur d de this à ptr et incrémente le nombre de références de ptr si ptr n'est pas nullptr. Le nombre de références de l'ancien objet de données partagées est décrémenté et l'objet est supprimé si le nombre de références atteint 0.

Cette fonction a été introduite dans Qt 6.0.

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

Échange ce pointeur de données explicitement partagé avec other. Cette opération est très rapide et n'échoue jamais.

[noexcept] T *QExplicitlySharedDataPointer::take()

Renvoie un pointeur sur l'objet partagé et réinitialise ce dernier à nullptr(c'est-à-dire que cette fonction définit le pointeur d de cet objet à nullptr).

Remarque : le nombre de références de l'objet retourné ne sera pas décrémenté. Cette fonction peut être utilisée avec le constructeur qui prend un objet de balise QAdoptSharedDataTag pour transférer l'objet de données partagées sans opérations atomiques intermédiaires.

[noexcept] QExplicitlySharedDataPointer::operator bool() const

Renvoie true si le pointeur d de this n'est pas nul.

[noexcept] bool QExplicitlySharedDataPointer::operator!() const

Renvoie true si le pointeur d de this est nullptr.

T &QExplicitlySharedDataPointer::operator*() const

Permet d'accéder aux membres de l'objet de données partagées.

[noexcept] T *QExplicitlySharedDataPointer::operator->()

Permet d'accéder aux membres de l'objet de données partagées.

[noexcept] T *QExplicitlySharedDataPointer::operator->() const

Fournit un accès constant aux membres de l'objet de données partagées.

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

Move-assigne other à cette instance QExplicitlySharedDataPointer.

[noexcept] QExplicitlySharedDataPointer<T> &QExplicitlySharedDataPointer::operator=(T *o)

Définit le pointeur d de cet objet à o et incrémente le nombre de références de o. Le nombre de références de l'ancien objet de données partagées de this est décrémenté. Si le nombre de références de l'ancien objet de données partagées devient 0, l'ancien objet de données partagées est supprimé.

[noexcept] QExplicitlySharedDataPointer<T> &QExplicitlySharedDataPointer::operator=(const QExplicitlySharedDataPointer<T> &o)

Définit le pointeur d de this au pointeur d de o et incrémente le nombre de références de l'objet de données partagées. Le nombre de références de l'ancien objet de données partagées de this est décrémenté. Si le nombre de références de l'ancien objet de données partagées devient 0, l'ancien objet de données partagées est supprimé.

Non-membres apparentés

[noexcept] bool operator!=(const QExplicitlySharedDataPointer<T> &lhs, const QExplicitlySharedDataPointer<T> &rhs)

Renvoie true si lhs et rhs n'ont pas le même pointeur d.

[noexcept] bool operator!=(const T *const &lhs, const QExplicitlySharedDataPointer<T> &rhs)

Renvoie true si le pointeur d de rhs n' est pas lhs.

[noexcept] bool operator==(const QExplicitlySharedDataPointer<T> &lhs, const QExplicitlySharedDataPointer<T> &rhs)

Renvoie true si lhs et rhs ont le même pointeur d.

[noexcept] bool operator==(const T *const &lhs, const QExplicitlySharedDataPointer<T> &rhs)

Renvoie true si le pointeur d de rhs est lhs.

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