QExplicitlySharedDataPointer Class
template <typename T> class QExplicitlySharedDataPointerLa clase QExplicitlySharedDataPointer representa un puntero a un objeto explícitamente compartido. Más...
| Cabecera: | #include <QExplicitlySharedDataPointer> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Hereda de: | QSharedDataPointerBase |
Esta clase es fuertemente comparable.
Esta clase es fuertemente comparable con T* y std::nullptr_t.
Nota: Todas las funciones de esta clase son reentrantes.
Tipos Públicos
Funciones Públicas
| 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) |
Funciones Protegidas
| T * | clone() |
No miembros relacionados
| 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) |
Descripción Detallada
QExplicitlySharedDataPointer<T> hace que escribir tus propias clases explícitamente compartidas sea fácil. QExplicitlySharedDataPointer implementa el conteo de referencias a prueba de hilos, asegurando que añadir QExplicitlySharedDataPointers a tus clases reentrantes no las hará no reentrantes.
Excepto por una gran diferencia, QExplicitlySharedDataPointer es igual que QSharedDataPointer. La gran diferencia es que las funciones miembro de QExplicitlySharedDataPointer no hacen la copia automática en la operación de escritura (detach()) que los miembros no-const de QSharedDataPointer hacen antes de permitir que el objeto de datos compartidos sea modificado. Hay una funcion detach() disponible, pero si realmente quieres detach(), tienes que llamarla tu mismo. Esto significa que los QExplicitlySharedDataPointers se comportan como punteros regulares de C++, excepto que al hacer conteo de referencias y no borrar el objeto de datos compartidos hasta que el conteo de referencias sea 0, evitan el problema del puntero colgante.
Es instructivo comparar QExplicitlySharedDataPointer con QSharedDataPointer a modo de ejemplo. Considere la clase Employee example en QSharedDataPointer, modificada para usar compartición explícita como se explica en la discusión Implicit vs Explicit Sharing.
Ten en cuenta que si usas esta clase pero ves que llamas mucho a detach(), probablemente deberías usar QSharedDataPointer en su lugar.
En la documentación de la función miembro, el puntero d siempre se refiere al puntero interno al objeto de datos compartidos.
Véase también QSharedData y QSharedDataPointer.
Documentación de tipos de miembros
QExplicitlySharedDataPointer::Type
Es el tipo del objeto de datos compartidos. El puntero d apunta a un objeto de este tipo.
Documentación de las funciones miembro
[noexcept] QExplicitlySharedDataPointer::QExplicitlySharedDataPointer()
Construye un QExplicitlySharedDataPointer inicializado con nullptr como puntero d.
[explicit noexcept] QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(T *data)
Construye un QExplicitlySharedDataPointer con el puntero d establecido a data e incrementa la cuenta de referencias de data.
[noexcept] template <typename X> QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<X> &o)
Este constructor de copia es diferente en el sentido de que permite que o sea un tipo diferente de puntero de datos compartidos explícitamente pero que tenga un objeto de datos compartidos compatible.
Por defecto, el puntero d de o (de tipo X *) se convierte implícitamente al tipo T *; el resultado de esta conversión se establece como el puntero d de este, y se incrementa la cuenta de referencias del objeto de datos compartidos.
[noexcept] QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<T> &o)
Este constructor de copia estándar establece el puntero d de this al puntero d en o e incrementa la cuenta de referencias del objeto de datos compartidos.
[noexcept] QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(QExplicitlySharedDataPointer<T> &&o)
Move-construye una instancia de QExplicitlySharedDataPointer, haciendo que apunte al mismo objeto al que apuntaba o.
QExplicitlySharedDataPointer::~QExplicitlySharedDataPointer()
Disminuye el recuento de referencias del objeto de datos compartidos. Si el recuento de referencias llega a 0, se elimina el objeto de datos compartidos. A continuación, se destruye.
[protected] T *QExplicitlySharedDataPointer::clone()
Crea y devuelve una copia profunda de los datos actuales. Esta función es llamada por detach() cuando el recuento de referencias es mayor que 1 para crear la nueva copia. Esta función utiliza el operador new y llama al constructor de copia del tipo T.
Véase QSharedDataPointer<T>::clone() para una explicación de cómo utilizarla.
[noexcept] const T *QExplicitlySharedDataPointer::constData() const
Devuelve un puntero constante al objeto de datos compartidos.
Véase también data().
[noexcept] T *QExplicitlySharedDataPointer::data() const
Devuelve un puntero al objeto de datos compartidos.
void QExplicitlySharedDataPointer::detach()
Si la cuenta de referencias del objeto de datos compartidos es mayor que 1, esta función crea una copia profunda del objeto de datos compartidos y establece el puntero d de éste a la copia.
Dado que QExplicitlySharedDataPointer no realiza la copia automática en las operaciones de escritura que realizan los miembros de QSharedDataPointer, detach() no se llama automáticamente en ninguna parte de las funciones miembro de esta clase. Si encuentra que está llamando a detach() en cualquier parte de su código, considere usar QSharedDataPointer en su lugar.
[noexcept, since 6.0] T *QExplicitlySharedDataPointer::get() const
Igual que data(). Esta función se proporciona por compatibilidad con STL.
Esta función se introdujo en Qt 6.0.
[noexcept, since 6.0] void QExplicitlySharedDataPointer::reset(T *ptr = nullptr)
Establece el puntero d de este en ptr e incrementa la cuenta de referencias de ptr'si ptr no es nullptr. La cuenta de referencia del antiguo objeto de datos compartidos se decrementa, y el objeto se elimina si la cuenta de referencia llega a 0.
Esta función se introdujo en Qt 6.0.
[noexcept] void QExplicitlySharedDataPointer::swap(QExplicitlySharedDataPointer<T> &other)
Intercambia este puntero de datos compartido explícitamente con other. Esta operación es muy rápida y nunca falla.
[noexcept] T *QExplicitlySharedDataPointer::take()
Devuelve un puntero al objeto compartido, y restablece esto a nullptr. (Es decir, esta función establece el puntero d de esto a nullptr.)
Nota: La cuenta de referencias del objeto devuelto no será decrementada. Esta función puede utilizarse junto con el constructor que toma un objeto de etiqueta QAdoptSharedDataTag para transferir el objeto de datos compartidos sin operaciones atómicas intermedias.
[noexcept] QExplicitlySharedDataPointer::operator bool() const
Devuelve true si el puntero d de esto no es null.
[noexcept] bool QExplicitlySharedDataPointer::operator!() const
Devuelve true si el puntero d de esto es nullptr.
T &QExplicitlySharedDataPointer::operator*() const
Proporciona acceso a los miembros del objeto de datos compartidos.
[noexcept] T *QExplicitlySharedDataPointer::operator->()
Proporciona acceso a los miembros del objeto de datos compartidos.
[noexcept] T *QExplicitlySharedDataPointer::operator->() const
Proporciona acceso const a los miembros del objeto de datos compartidos.
[noexcept] QExplicitlySharedDataPointer<T> &QExplicitlySharedDataPointer::operator=(QExplicitlySharedDataPointer<T> &&other)
Mover-asigna other a esta instancia QExplicitlySharedDataPointer.
[noexcept] QExplicitlySharedDataPointer<T> &QExplicitlySharedDataPointer::operator=(T *o)
Establece el puntero d de esto en o e incrementa el número de referencias de o. La cuenta de referencia del antiguo objeto de datos compartidos de this se decrementa. Si la cuenta de referencia del antiguo objeto de datos compartidos se convierte en 0, el antiguo objeto de datos compartidos se elimina.
[noexcept] QExplicitlySharedDataPointer<T> &QExplicitlySharedDataPointer::operator=(const QExplicitlySharedDataPointer<T> &o)
Establece el puntero d de this al puntero d de o e incrementa la cuenta de referencia del objeto de datos compartidos. La cuenta de referencia del antiguo objeto de datos compartidos de this se decrementa. Si la cuenta de referencia del antiguo objeto de datos compartidos se convierte en 0, el antiguo objeto de datos compartidos se elimina.
No miembros relacionados
[noexcept] bool operator!=(const QExplicitlySharedDataPointer<T> &lhs, const QExplicitlySharedDataPointer<T> &rhs)
Devuelve true si lhs y rhs no tienen el mismo puntero d.
[noexcept] bool operator!=(const T *const &lhs, const QExplicitlySharedDataPointer<T> &rhs)
Devuelve true si el puntero d de rhs no es lhs.
[noexcept] bool operator==(const QExplicitlySharedDataPointer<T> &lhs, const QExplicitlySharedDataPointer<T> &rhs)
Devuelve true si lhs y rhs tienen el mismo puntero d.
[noexcept] bool operator==(const T *const &lhs, const QExplicitlySharedDataPointer<T> &rhs)
Devuelve true si el puntero d de rhs es 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.