QExplicitlySharedDataPointer Class
template <typename T> class QExplicitlySharedDataPointerDie Klasse „QExplicitlySharedDataPointer“ stellt einen Zeiger auf ein explizit freigegebenes Objekt dar. Mehr...
| Header: | #include <QExplicitlySharedDataPointer> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Erbt von: | QSharedDataPointerBase |
Hinweis: Alle Funktionen dieser Klasse sind reentrant.
Vergleiche zu QExplicitlySharedDataPointer
| Kategorie | Vergleichbare Typen |
|---|---|
| stark | QExplicitlySharedDataPointer |
| strong | T* und std::nullptr_t. |
Öffentliche Typen
Öffentliche Funktionen
| 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) |
Geschützte Funktionen
| T * | clone() |
Verwandte Nicht-Mitglieder
| 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) |
Ausführliche Beschreibung
`QExplicitlySharedDataPointer` ist eine Template-Klasse, bei der der Template-Parameter ` T ` den Typ der gemeinsam genutzten Datenklasse angibt, die von ` QSharedData` abgeleitet ist.
QExplicitlySharedDataPointer<T> erleichtert das Schreiben eigener explizit gemeinsam genutzter Klassen. QExplicitlySharedDataPointer implementiert eine threadsichere Referenzzählung und stellt so sicher, dass das Hinzufügen von QExplicitlySharedDataPointers zu Ihren reentranten Klassen diese nicht nicht-reentrant macht.
Abgesehen von einem wesentlichen Unterschied verhält sich `QExplicitlySharedDataPointer` genau wie ` QSharedDataPointer`. Der wesentliche Unterschied besteht darin, dass die Mitgliedsfunktionen von `QExplicitlySharedDataPointer` nicht den automatischen „Copy-on-Write“-Vorgang (`detach()`) ausführen, den nicht-konstante Mitglieder von ` QSharedDataPointer ` durchführen, bevor das gemeinsam genutzte Datenobjekt geändert werden darf. Es gibt zwar eine Funktion „ detach()“, aber wenn Sie wirklich „ detach()“ ausführen möchten, müssen Sie diese selbst aufrufen. Das bedeutet, dass sich „QExplicitlySharedDataPointers“ wie normale C++-Zeiger verhalten, mit dem Unterschied, dass sie durch Referenzzählung und das Nicht-Löschen des gemeinsam genutzten Datenobjekts, solange die Referenzzahl noch 0 ist, das Problem der „Dangling Pointer“ vermeiden.
Es ist aufschlussreich, QExplicitlySharedDataPointer anhand eines Beispiels mit QSharedDataPointer zu vergleichen. Betrachten Sie das Beispiel „ Employee example “ unter QSharedDataPointer, das so angepasst wurde, dass es explizites Sharing verwendet, wie in der Erläuterung unter Implicit vs Explicit Sharing beschrieben.
Beachten Sie: Wenn Sie diese Klasse verwenden und feststellen, dass Sie ` detach()` häufig aufrufen, sollten Sie stattdessen wahrscheinlich ` QSharedDataPointer ` verwenden.
In der Dokumentation der Mitgliedsfunktionen bezieht sich der Zeiger `d` immer auf den internen Zeiger auf das gemeinsam genutzte Datenobjekt.
Siehe auch QSharedData und QSharedDataPointer.
Dokumentation zu Mitgliedstypen
QExplicitlySharedDataPointer::Type
Dies ist der Typ des gemeinsam genutzten Datenobjekts. Der Zeiger `d` verweist auf ein Objekt dieses Typs.
Dokumentation der Mitgliedsfunktionen
[noexcept] QExplicitlySharedDataPointer::QExplicitlySharedDataPointer()
Erstellt einen `QExplicitlySharedDataPointer`, der mit ` nullptr ` als Zeiger `d` initialisiert wird.
[explicit noexcept] QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(T *data)
Erstellt einen `QExplicitlySharedDataPointer`, wobei der Zeiger `d` auf ` data ` gesetzt wird, und erhöht die Referenzanzahl von ` data`.
[noexcept] template <typename X> QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<X> &o)
Dieser Kopierkonstruktor unterscheidet sich insofern, als er zulässt, dass „ o “ ein anderer Typ eines explizit gemeinsam genutzten Datenzeigers ist, der jedoch über ein kompatibles gemeinsam genutztes Datenobjekt verfügt.
Standardmäßig wird der Zeiger `d` von ` o ` (vom Typ ` \a X *`) implizit in den Typ ` \a T *` konvertiert; das Ergebnis dieser Konvertierung wird als Zeiger `d` von `this` gesetzt, und die Referenzanzahl des gemeinsam genutzten Datenobjekts wird erhöht.
[noexcept] QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<T> &o)
Dieser Standard-Kopierkonstruktor setzt den Zeiger „d“ von „this“ auf den Zeiger „d“ in „ o “ und erhöht die Referenzanzahl des gemeinsam genutzten Datenobjekts.
[noexcept] QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(QExplicitlySharedDataPointer<T> &&o)
Erstellt eine Instanz von `QExplicitlySharedDataPointer` und sorgt dafür, dass diese auf dasselbe Objekt verweist, auf das zuvor ` o ` verwiesen hat.
QExplicitlySharedDataPointer::~QExplicitlySharedDataPointer()
Verringert die Referenzanzahl des gemeinsam genutzten Datenobjekts. Wenn die Referenzanzahl 0 wird, wird das gemeinsam genutzte Datenobjekt gelöscht. Es wird daraufhin zerstört.
[protected] T *QExplicitlySharedDataPointer::clone()
Erstellt eine tiefe Kopie der aktuellen Daten und gibt diese zurück. Diese Funktion wird von ` detach()` aufgerufen, wenn die Referenzanzahl größer als 1 ist, um die neue Kopie zu erstellen. Diese Funktion verwendet den Operator `new` und ruft den Kopierkonstruktor des Typs ` T` auf.
Eine Erläuterung zur Verwendung finden Sie unter ` QSharedDataPointer<T>::clone()`.
[noexcept] const T *QExplicitlySharedDataPointer::constData() const
Gibt einen const-Zeiger auf das gemeinsam genutzte Datenobjekt zurück.
Siehe auch ` data()`.
[noexcept] T *QExplicitlySharedDataPointer::data() const
Gibt einen Zeiger auf das gemeinsam genutzte Datenobjekt zurück.
void QExplicitlySharedDataPointer::detach()
Wenn die Referenzanzahl des gemeinsam genutzten Datenobjekts größer als 1 ist, erstellt diese Funktion eine tiefe Kopie des gemeinsam genutzten Datenobjekts und setzt den Zeiger „d“ dieses Objekts auf die Kopie.
Da ` QExplicitlySharedDataPointer ` im Gegensatz zu den Mitgliedern von ` QSharedDataPointer ` keine automatischen Kopiervorgänge beim Schreiben durchführt, wird `detach()` an keiner Stelle in den Memberfunktionen dieser Klasse automatisch aufgerufen. Wenn Sie feststellen, dass Sie `detach()` an vielen Stellen in Ihrem Code aufrufen, sollten Sie stattdessen die Verwendung von ` QSharedDataPointer ` in Betracht ziehen.
[noexcept, since 6.0] T *QExplicitlySharedDataPointer::get() const
Entspricht ` data()`. Diese Funktion wird aus Gründen der STL-Kompatibilität bereitgestellt.
Diese Funktion wurde in Qt 6.0 eingeführt.
[noexcept, since 6.0] void QExplicitlySharedDataPointer::reset(T *ptr = nullptr)
Setzt den Zeiger `d` dieses Objekts auf ` ptr ` und erhöht die Referenzanzahl von ` ptr`, sofern ` ptr ` nicht ` nullptr` ist. Die Referenzanzahl des alten gemeinsam genutzten Datenobjekts wird verringert, und das Objekt wird gelöscht, sobald die Referenzanzahl 0 erreicht.
Diese Funktion wurde in Qt 6.0 eingeführt.
[noexcept] void QExplicitlySharedDataPointer::swap(QExplicitlySharedDataPointer<T> &other)
Tauscht diesen explizit gemeinsam genutzten Datenzeiger mit other aus. Dieser Vorgang ist sehr schnell und schlägt niemals fehl.
[noexcept] T *QExplicitlySharedDataPointer::take()
Gibt einen Zeiger auf das gemeinsam genutzte Objekt zurück und setzt diesen auf „ nullptr “ zurück. (Das heißt, diese Funktion setzt den Zeiger „d“ von „this“ auf „ nullptr “.)
Hinweis: Die Referenzanzahl des zurückgegebenen Objekts wird nicht verringert. Diese Funktion kann zusammen mit dem Konstruktor verwendet werden, der ein „ QAdoptSharedDataTag “-Tag-Objekt entgegennimmt, um das gemeinsam genutzte Datenobjekt ohne dazwischenliegende atomare Operationen zu übertragen.
[noexcept] QExplicitlySharedDataPointer::operator bool() const
Gibt „ true “ zurück, wenn der Zeiger „d“ dieses Objekts nicht null ist.
[noexcept] bool QExplicitlySharedDataPointer::operator!() const
Gibt „ true “ zurück, wenn der Zeiger „d“ von „this“ auf „ nullptr “ verweist.
T &QExplicitlySharedDataPointer::operator*() const
Bietet Zugriff auf die Elemente des gemeinsam genutzten Datenobjekts.
[noexcept] T *QExplicitlySharedDataPointer::operator->()
Bietet Zugriff auf die Elemente des gemeinsam genutzten Datenobjekts.
[noexcept] T *QExplicitlySharedDataPointer::operator->() const
Bietet const-Zugriff auf die Elemente des gemeinsam genutzten Datenobjekts.
[noexcept] QExplicitlySharedDataPointer<T> &QExplicitlySharedDataPointer::operator=(QExplicitlySharedDataPointer<T> &&other)
Weist „ other “ dieser „ QExplicitlySharedDataPointer “-Instanz zu.
[noexcept] QExplicitlySharedDataPointer<T> &QExplicitlySharedDataPointer::operator=(T *o)
Setzt den Zeiger „d“ von „this“ auf „ o “ und erhöht die Referenzanzahl von „ o “. Die Referenzanzahl des alten gemeinsam genutzten Datenobjekts von „this“ wird verringert. Wenn die Referenzanzahl des alten gemeinsam genutzten Datenobjekts den Wert 0 erreicht, wird das alte gemeinsam genutzte Datenobjekt gelöscht.
[noexcept] QExplicitlySharedDataPointer<T> &QExplicitlySharedDataPointer::operator=(const QExplicitlySharedDataPointer<T> &o)
Setzt den Zeiger „d“ dieses Objekts auf den Zeiger „d“ von o und erhöht die Referenzanzahl des gemeinsam genutzten Datenobjekts. Die Referenzanzahl des alten gemeinsam genutzten Datenobjekts dieses Objekts wird verringert. Wenn die Referenzanzahl des alten gemeinsam genutzten Datenobjekts den Wert 0 erreicht, wird das alte gemeinsam genutzte Datenobjekt gelöscht.
Verwandte Nicht-Mitglieder
[noexcept] bool operator!=(const QExplicitlySharedDataPointer<T> &lhs, const QExplicitlySharedDataPointer<T> &rhs)
Gibt „ true “ zurück, wenn „ lhs “ und „ rhs “ nicht denselben Zeiger „d“ haben.
[noexcept] bool operator!=(const T *const &lhs, const QExplicitlySharedDataPointer<T> &rhs)
Gibt „ true “ zurück, wenn der Zeiger „d“ von „ rhs “ nicht „ lhs “ ist.
[noexcept] bool operator==(const QExplicitlySharedDataPointer<T> &lhs, const QExplicitlySharedDataPointer<T> &rhs)
Gibt „ true “ zurück, wenn „ lhs “ und „ rhs “ denselben Zeiger „d“ haben.
[noexcept] bool operator==(const T *const &lhs, const QExplicitlySharedDataPointer<T> &rhs)
Gibt „ true “ zurück, wenn der Zeiger „d“ von „ rhs “ auf „ lhs “ verweist.
© 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.