System::SmartPtr-Klasse

SmartPtr class

Zeigerklasse zum Einhüllen von Typen, die auf dem Heap alloziert werden. Verwenden Sie sie, um den Speicher für Klassen zu verwalten, die Object erben. Dieser Zeigertyp folgt intrusiven Zeigersemantiken. Der Referenzzähler wird entweder im Object selbst oder in einer Zählerstruktur gespeichert, die fest mit der Object-Instanz verknüpft ist. In jedem Fall bilden alle SmartPtr-Instanzen eine Single‑Ownership‑Gruppe, unabhängig davon, wie sie erstellt wurden, was sich vom Verhalten der std::shared_ptr‑Klasse unterscheidet. Das Konvertieren eines rohen Zeigers zu SmartPtr ist sicher, solange andere SmartPtr-Instanzen gemeinsame Referenzen auf dasselbe Objekt halten. Eine SmartPtr-Klasseninstanz kann sich in einem von zwei Zuständen befinden: Shared‑Pointer und Weak‑Pointer. Damit ein Objekt am Leben bleibt, sollte die Anzahl der Shared‑Referenzen positiv sein. Sowohl Weak‑ als auch Shared‑Pointer können verwendet werden, um auf das referenzierte Objekt zuzugreifen (Methoden aufzurufen, Felder zu lesen oder zu schreiben usw.), aber Weak‑Pointer nehmen nicht am Referenzzähler der Shared‑Pointer teil. Das Object wird gelöscht, wenn der letzte ‘shared’ SmartPtr-Pointer darauf zerstört wird. Stellen Sie also sicher, dass dies nicht passiert, wenn keine anderen Shared‑SmartPtr-Pointer auf das Objekt existieren, z. B. während der Objektkonstruktion oder -destruktion. Verwenden Sie System::Object::ThisProtector‑Sentry‑Objekte (im C++‑Code) oder CppCTORSelfReference‑ bzw. CppSelfReference‑Attribute (im zu übersetzenden C#‑Code), um dieses Problem zu beheben. Ähnlich sollten Sie Schleifenreferenzen durch die Verwendung der System::WeakPtr-Zeigerklasse oder des System::SmartPtrMode::Weak-Zeigermodus (im C++‑Code) bzw. des CppWeakPtr‑Attributs (im zu übersetzenden C#‑Code) aufbrechen. Wenn zwei oder mehr Objekte sich gegenseitig mit ‘shared’‑Pointern referenzieren, werden sie nie gelöscht. Wenn der Zeigertyp (Weak oder Shared) zur Laufzeit gewechselt werden soll, verwenden Sie die System::SmartPtr::set_Mode()-Methode oder die System::DynamicWeakPtr-Klasse. Die SmartPtr-Klasse enthält keine virtuellen Methoden. Sie sollten sie nur erben, wenn Sie eine eigene Speicherverwaltungsstrategie erstellen. Dieser Typ ist ein Zeiger zur Verwaltung der Löschung anderer Objekte. Er sollte auf dem Stack alloziert und an Funktionen entweder per Wert oder per const‑Referenz übergeben werden.

template<class T>class SmartPtr
ParameterBeschreibung
TTyp des referenzierten Objekts. Muss entweder System::Object oder eine Unterklasse davon sein.

Methoden

MethodeBeschreibung
begin()Zugriff auf die begin()-Methode einer zugrunde liegenden Sammlung. Kompiliert nur, wenn SmartPtr_ ein Spezialisierungstyp mit einer begin()-Methode ist.
begin() constZugriff auf die begin()-Methode einer zugrunde liegenden Sammlung. Kompiliert nur, wenn SmartPtr_ ein Spezialisierungstyp mit einer begin()-Methode ist.
Cast() constWandelt den Zeiger in seinen eigenen Typ um.
Cast() constWandelt den Zeiger mittels static_cast in den Basistyp um.
Cast() constWandelt den Zeiger mittels dynamic_cast in den abgeleiteten Typ um.
Cast() constWandelt den Zeiger mittels dynamic_cast in den abgeleiteten Typ um.
cbegin() constZugriff auf die cbegin()-Methode einer zugrunde liegenden Sammlung. Kompiliert nur, wenn SmartPtr_ ein Spezialisierungstyp mit einer cbegin()-Methode ist.
cend() constZugriff auf die cend()-Methode einer zugrunde liegenden Sammlung. Kompiliert nur, wenn SmartPtr_ ein Spezialisierungstyp mit einer cend()-Methode ist.
const_pointer_cast() constWandelt den Zeiger mittels const_cast in einen anderen Typ des referenzierten Objekts um.
dynamic_pointer_cast() constWandelt den Zeiger mittels dynamic_cast in einen anderen Typ des referenzierten Objekts um.
end()Zugriff auf die end()-Methode einer zugrunde liegenden Sammlung. Kompiliert nur, wenn SmartPtr_ ein Spezialisierungstyp mit einer end()-Methode ist.
end() constZugriff auf die end()-Methode einer zugrunde liegenden Sammlung. Kompiliert nur, wenn SmartPtr_ ein Spezialisierungstyp mit einer end()-Methode ist.
get() constGibt das referenzierte Objekt zurück.
get_Mode() constGibt den Zeigermodus zurück.
get_shared() constGibt das referenzierte Objekt zurück, assertiert jedoch, dass der Zeiger im shared mode ist.
get_shared_count() constErmittelt die Anzahl der bestehenden Shared‑Pointer auf das referenzierte Objekt, einschließlich des aktuellen. Assertiert, dass der aktuelle Zeiger im shared mode ist.
GetHashCode() constRuft GetHashCode() für das referenzierte Objekt auf.
GetObjectNotNull() constGibt das aktuell referenzierte Objekt zurück (falls vorhanden) oder wirft eine Ausnahme.
GetObjectOrNull() constGibt das referenzierte Objekt zurück (falls vorhanden) oder nullptr. Gleichbedeutend mit get().
GetObjectOwner() constGibt das referenzierte Objekt zurück.
GetPointer() constGibt das referenzierte Objekt zurück (falls vorhanden) oder nullptr. Gleichbedeutend mit get().
Is(const System::TypeInfo&) constPrüft, ob das referenzierte Objekt vom angegebenen Typ oder einem abgeleiteten Typ ist. Folgt den C#‑‘is’-Semantiken.
IsAliasingPtr() constPrüft, ob der Zeiger auf ein anderes Objekt als das besessene (erstellt durch einen aliasing‑Konstruktor) zeigt.
IsShared() constPrüft, ob der Zeiger im shared mode ist.
IsWeak() constPrüft, ob der Zeiger im weak mode ist.
explicit operator bool() constPrüft, ob der Zeiger nicht null ist.
operator!() constPrüft, ob der Zeiger null ist.
operator*() constGibt eine Referenz auf das referenzierte Objekt zurück. Assertiert, dass der Zeiger nicht null ist.
operator->() constErmöglicht den Zugriff auf Mitglieder des referenzierten Objekts.
operator<(Y *) constBietet weniger‑Vergleichssemantik für die Klasse SmartPtr.
operator<(SmartPtr<Y> const&) constBietet weniger‑Vergleichssemantik für die Klasse SmartPtr.
operator=(SmartPtr_&&)Move‑zuweist das SmartPtr-Objekt. x wird unbenutzbar.
operator=(const SmartPtr_&)Kopiert das SmartPtr-Objekt per Zuweisung.
operator=(const SmartPtr<Q>&)Kopiert das SmartPtr-Objekt per Zuweisung. Führt notwendige Typkonvertierungen durch.
operator=(Pointee_ *)Weist einen rohen Zeiger dem SmartPtr-Objekt zu.
operator=(std::nullptr_t)Setzt den Zeigerwert auf nullptr.
operator==(std::nullptr_t) constPrüft, ob der Zeiger auf nullptr zeigt.
operator[](IdxType) constZugriff auf Array‑Elemente. Kompiliert nur, wenn SmartPtr_ eine Spezialisierung von System::Array ist.
RemoveAliasing() constEntfernt Aliasing (erstellt durch einen aliasing‑Konstruktor) vom Zeiger, stellt sicher, dass er (bei shared) verwaltet oder (bei weak) verfolgt dasselbe Objekt, auf das er zeigt.
reset(Pointee_ *)Setzt das referenzierte Objekt.
reset()Lässt den Zeiger auf nullptr zeigen.
set_Mode(SmartPtrMode)Setzt den Zeigermodus. Kann die Referenzzähler des referenzierten Objekts ändern.
SetContainedTemplateWeakPtr(uint32_t) constRuft die Methode SetTemplateWeakPtr() am referenzierten Objekt auf (falls vorhanden).
SmartPtr(SmartPtrMode)Erstellt ein SmartPtr-Objekt des erforderlichen Modus.
SmartPtr(std::nullptr_t, SmartPtrMode)Erstellt ein Nullzeiger-SmartPtr-Objekt des erforderlichen Modus.
SmartPtr(Pointee_ *, SmartPtrMode)Erstellt ein SmartPtr, das auf das angegebene Objekt zeigt, oder konvertiert einen rohen Zeiger zu einem SmartPtr.
SmartPtr(const SmartPtr_&, SmartPtrMode)Kopiert ein SmartPtr-Objekt. Beide Zeiger zeigen danach auf dasselbe Objekt.
SmartPtr(const SmartPtr<Q>&, SmartPtrMode)Kopiert ein SmartPtr-Objekt. Beide Zeiger zeigen danach auf dasselbe Objekt. Führt eine Typkonvertierung durch, falls erlaubt.
SmartPtr(SmartPtr_&&, SmartPtrMode)Verschiebt ein SmartPtr-Objekt. Tauscht im Wesentlichen zwei Zeiger aus, wenn sie beide im selben Modus sind. x kann nach dem Aufruf unbenutzbar sein.
explicit SmartPtr(const SmartPtr<Array<Y>>&, SmartPtrMode)Konvertiert den Typ des referenzierten Arrays, indem ein neues Array eines anderen Typs erstellt wird. Nützlich, wenn es in C# einen Array-Typumwandlung gibt, die in C++ nicht unterstützt wird.
explicit SmartPtr(const Y&)Initialisiert ein leeres Array. Wird verwendet, um einige C#-Codekonstrukte zu übersetzen.
SmartPtr(const SmartPtr<P>&, Pointee_ *, SmartPtrMode)Konstruiert ein SmartPtr, das Eigentumsinformationen mit dem Anfangswert von ptr teilt, aber einen nicht verwandten und nicht verwalteten Zeiger p enthält.
static_pointer_cast() constWandelt den Zeiger mithilfe von static_cast auf das referenzierte Objekt in einen anderen Typ um.
ToObjectPtr() constKonvertiert jeden Zeigertyp zu einem Zeiger auf Object. Erfordert nicht, dass der Typ Pointee_ vollständig ist.
static Type()Abkürzung, um das System::TypeInfo-Objekt für den Typ Pointee_ zu erhalten.
~SmartPtr()Zerstört das SmartPtr-Objekt. Falls nötig, verringert es den Referenzzähler des referenzierten Objekts und löscht das Objekt.

Typedefs

TypedefBeschreibung
ArrayTypeDasselbe wie Pointee_, falls es eine Spezialisierung von System::Array ist, sonst void.
Pointee_Typ, auf den gezeigt wird.
SmartPtr_Spezialisierter Smart-Pointer-Typ.
ValueTypeSpeichertyp des referenzierten Arrays. Nur sinnvoll, wenn T eine Spezialisierung von System::Array ist.

Siehe auch