System::SmartPtr‑Klasse

SmartPtr class

Pointer‑Klasse zum Einhüllen von Typen, die im Heap alloziert werden. Verwenden Sie sie, um den Speicher für Klassen zu verwalten, die Object erben. Dieser Pointer‑Typ folgt den Intrusive‑Pointer‑Semantiken. Der Referenzzähler wird entweder im Object selbst oder in einer Zählerstruktur gespeichert, die eng 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 Klasse std::shared_ptr unterscheidet. Das Konvertieren eines rohen Zeigers zu SmartPtr ist sicher, solange andere SmartPtr‑Instanzen geteilte Referenzen auf dasselbe Objekt halten. SmartPtr‑Klasseninstanz kann sich in einem von zwei Zuständen befinden: Shared‑Pointer und Weak‑Pointer. Um das Objekt am Leben zu erhalten, 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ählen der Shared‑Pointer teil. Object wird gelöscht, wenn der letzte ‘shared’ SmartPtr‑Pointer darauf zerstört wird. Stellen Sie also sicher, dass dies nicht geschieht, wenn keine anderen Shared‑SmartPtr‑Pointer auf das Objekt existieren, z. b. während der Objektkonstruktion oder -zerstörung. Verwenden Sie System::Object::ThisProtector‑Sentry‑Objekte (im C++‑Code) oder das Attribut CppCTORSelfReference bzw. CppSelfReference (im zu übersetzenden C#‑Code), um dieses Problem zu beheben. Ähnlich sollten Sie Schleifenreferenzen durch die Verwendung der Pointer‑Klasse System::WeakPtr oder des Pointer‑Modus System::SmartPtrMode::Weak (im C++‑Code) bzw. des Attributs CppWeakPtr (im zu übersetzenden C#‑Code) aufbrechen. Wenn zwei oder mehr Objekte sich gegenseitig mit ‘shared’‑Pointern referenzieren, werden sie nie gelöscht. Sollte der Pointer‑Typ (weak oder shared) zur Laufzeit gewechselt werden, verwenden Sie die Methode System::SmartPtr::set_Mode() oder die Klasse System::DynamicWeakPtr. SmartPtr‑Klasse enthält keine virtuellen Methoden. Sie sollten sie nur erben, wenn Sie eine eigene Speicherverwaltungsstrategie erstellen. Dieser Typ ist ein Pointer, um das Löschen anderer Objekte zu verwalten. Er sollte im Stack alloziert und in C++ 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 Methode begin() einer zugrunde liegenden Sammlung. Kompiliert nur, wenn SmartPtr_ ein Spezialisierungstyp mit der Methode begin() ist.
begin() constZugriff auf die Methode begin() einer zugrunde liegenden Sammlung. Kompiliert nur, wenn SmartPtr_ ein Spezialisierungstyp mit der Methode begin() ist.
Cast() constWandelt den Pointer in seinen eigenen Typ um.
Cast() constWandelt den Pointer mittels static_cast in den Basistyp um.
Cast() constWandelt den Pointer mittels dynamic_cast in den abgeleiteten Typ um.
Cast() constWandelt den Pointer mittels dynamic_cast in den abgeleiteten Typ um.
cbegin() constZugriff auf die Methode cbegin() einer zugrunde liegenden Sammlung. Kompiliert nur, wenn SmartPtr_ ein Spezialisierungstyp mit der Methode cbegin() ist.
cend() constZugriff auf die Methode cend() einer zugrunde liegenden Sammlung. Kompiliert nur, wenn SmartPtr_ ein Spezialisierungstyp mit der Methode cend() ist.
const_pointer_cast() constWandelt den Pointer mittels const_cast auf das referenzierte Objekt in einen anderen Typ um.
dynamic_pointer_cast() constWandelt den Pointer mittels dynamic_cast auf das referenzierte Objekt in einen anderen Typ um.
end()Zugriff auf die Methode end() einer zugrunde liegenden Sammlung. Kompiliert nur, wenn SmartPtr_ ein Spezialisierungstyp mit der Methode end() ist.
end() constZugriff auf die Methode end() einer zugrunde liegenden Sammlung. Kompiliert nur, wenn SmartPtr_ ein Spezialisierungstyp mit der Methode end() ist.
get() constGibt das referenzierte Objekt zurück.
get_Mode() constLiefert den Zeigermodus.
get_shared() constGibt das referenzierte Objekt zurück, prüft jedoch, dass der Zeiger im Shared-Modus ist.
get_shared_count() constLiefert die Anzahl der vorhandenen Shared-Zeiger auf das referenzierte Objekt, einschließlich des aktuellen. Prüft, dass der aktuelle Zeiger im Shared-Modus 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. Entspricht get().
GetObjectOwner() constGibt das referenzierte Objekt zurück.
GetPointer() constGibt das referenzierte Objekt zurück (falls vorhanden) oder nullptr. Entspricht get().
Is(const System::TypeInfo&) constPrüft, ob das referenzierte Objekt vom spezifischen Typ oder einem abgeleiteten Typ ist. Folgt den C#‑„is“-Semantiken.
IsAliasingPtr() constPrüft, ob der Zeiger auf ein anderes Objekt als das eigene zeigt (erstellt durch einen Alias‑Konstruktor).
IsShared() constPrüft, ob der Zeiger im Shared-Modus ist.
IsWeak() constPrüft, ob der Zeiger im Weak-Modus 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. Prüft, 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 zu.
operator=(const SmartPtr<Q>&)Kopiert das SmartPtr-Objekt zu. Führt erforderliche 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 das Alias (erstellt durch einen Alias‑Konstruktor) vom Zeiger und 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 Null‑Zeiger‑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. Effektiv werden zwei Zeiger vertauscht, wenn sie denselben Modus haben. x kann nach dem Aufruf unbrauchbar 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‑Typumwandlungsoperator gibt, der 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)Erstellt 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 mit static_cast am referenzierten 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

Typedef.Beschreibung
ArrayTypeDasselbe wie Pointee_, wenn es eine Spezialisierung von System::Array ist, andernfalls 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