System::SmartPtr‑klasse

SmartPtr class

Pointer‑klasse om typen die op de heap worden gealloceerd te omhullen. Gebruik deze om geheugen te beheren voor klassen die Object erven. Dit pointertype volgt intrusieve pointersemantiek. De referentieteller wordt opgeslagen ofwel in Object zelf of in een tellerstructuur die nauw verbonden is met de Object‑instantie. In elk geval vormen alle SmartPtr‑instanties een enkele eigendoms‑groep, ongeacht hoe ze zijn gemaakt, wat verschilt van het gedrag van de std::shared_ptr‑klasse. Het converteren van een ruwe pointer naar SmartPtr is veilig, aangezien er andere SmartPtr‑instanties zijn die gedeelde referenties naar hetzelfde object behouden. Een SmartPtr‑klasse‑instantie kan zich in een van twee toestanden bevinden: gedeelde pointer en zwakke pointer. Om het object levend te houden, moet het aantal gedeelde referenties positief zijn. Zowel zwakke als gedeelde pointers kunnen worden gebruikt om het aangewezen object te benaderen (om methoden aan te roepen, velden te lezen of te schrijven, enz.), maar zwakke pointers nemen niet deel aan de referentietelling van gedeelde pointers. Object wordt verwijderd wanneer de laatste ‘shared’ SmartPtr‑pointer naar het object wordt vernietigd. Zorg er dus voor dat dit niet gebeurt wanneer er geen andere gedeelde SmartPtr‑pointers naar het object bestaan, bijv. tijdens de constructie of destructie van het object. Gebruik System::Object::ThisProtector‑bewakingsobjecten (in C++‑code) of het CppCTORSelfReference‑ of CppSelfReference‑attribuut (in C#‑code die wordt vertaald) om dit probleem op te lossen. Zorg er bovendien voor dat lus‑referenties worden verbroken door de System::WeakPtr‑pointerklasse of de System::SmartPtrMode::Weak‑pointermodus (in C++‑code) of het CppWeakPtr‑attribuut (in C#‑code die wordt vertaald) te gebruiken. Als twee of meer objecten elkaar refereren met ‘shared’‑pointers, zullen ze nooit worden verwijderd. Als het pointertype (zwak of gedeeld) tijdens runtime moet worden gewijzigd, gebruik dan de System::SmartPtr::set_Mode()‑methode of de System::DynamicWeakPtr‑klasse. De SmartPtr‑klasse bevat geen virtuele methoden. U mag er alleen van overerven als u zelf een geheugenbeheersstrategie ontwikkelt. Dit type is een pointer om de verwijdering van een ander object te beheren. Het moet op de stack worden gealloceerd en aan functies worden doorgegeven, hetzij per waarde, hetzij per const‑referentie.

template<class T>class SmartPtr
ParameterBeschrijving
TType van het aangewezen object. Moet ofwel System::Object zijn of een subklasse daarvan.

Methoden

MethodeBeschrijving
begin()Accessor voor de begin()‑methode van een onderliggende collectie. Compileert alleen als SmartPtr_ een gespecialiseerd type is met een begin()‑methode.
begin() constAccessor voor de begin()‑methode van een onderliggende collectie. Compileert alleen als SmartPtr_ een gespecialiseerd type is met een begin()‑methode.
Cast() constCasts pointer naar zijn eigen type.
Cast() constCasts pointer naar basistype met static_cast.
Cast() constCasts pointer naar afgeleid type dynamic_cast.
Cast() constCasts pointer naar afgeleid type dynamic_cast.
cbegin() constAccessor voor cbegin() methode van een onderliggende collectie. Compileert alleen als SmartPtr_ een specialisatietype is met cbegin() methode.
cend() constAccessor voor cend() methode van een onderliggende collectie. Compileert alleen als SmartPtr_ een specialisatietype is met cend() methode.
const_pointer_cast() constCasts pointer naar ander type met const_cast op het aangewezen object.
dynamic_pointer_cast() constCasts pointer naar ander type met dynamic_cast op het aangewezen object.
end()Accessor voor end() methode van een onderliggende collectie. Compileert alleen als SmartPtr_ een specialisatietype is met end() methode.
end() constAccessor voor end() methode van een onderliggende collectie. Compileert alleen als SmartPtr_ een specialisatietype is met end() methode.
get() constHaalt aangewezen object op.
get_Mode() constHaalt pointermodus op.
get_shared() constHaalt aangewezen object op, maar stelt dat de pointer in gedeelde modus is.
get_shared_count() constHaalt het aantal gedeelde pointers op dat bestaat naar het gerefereerde object, inclusief de huidige. Stelt dat de huidige pointer in gedeelde modus is.
GetHashCode() constRoept GetHashCode() aan op het aangewezen object.
GetObjectNotNull() constHaalt momenteel gerefereerd object op (indien aanwezig) of gooit een uitzondering.
GetObjectOrNull() constHaalt aangewezen object op (indien aanwezig) of nullptr. Hetzelfde als get().
GetObjectOwner() constHaalt gerefereerd object op.
GetPointer() constHaalt aangewezen object op (indien aanwezig) of nullptr. Hetzelfde als get().
Is(const System::TypeInfo&) constControleert of het aangewezen object van een specifiek type of een afgeleid type is. Volgt de C# ‘is’ semantiek.
IsAliasingPtr() constControleert of de pointer naar een ander object wijst dan het eigendom (gecreëerd door een aliasing constructor).
IsShared() constControleert of de pointer in gedeelde modus is.
IsWeak() constControleert of de pointer in zwakke modus is.
explicit operator bool() constControleert of de pointer niet null is.
operator!() constControleert of de pointer null is.
operator*() constHaalt referentie naar het aangewezen object op. Stelt dat de pointer niet null is.
operator->() constStaat toe leden van het gerefereerde object te benaderen.
operator<(Y *) constBiedt minder-vergelijkingssemantiek voor de SmartPtr klasse.
operator<(SmartPtr<Y> const&) constBiedt minder-vergelijkingssemantiek voor de SmartPtr klasse.
operator=(SmartPtr_&&)Voert een move-toewijzing uit op een SmartPtr object. x wordt onbruikbaar.
operator=(const SmartPtr_&)Voert een copy-toewijzing uit op een SmartPtr object.
operator=(const SmartPtr<Q>&)Kopieert-toewijst SmartPtr object. Voert vereiste typeconversies uit.
operator=(Pointee_ *)Wijs een ruwe pointer toe aan SmartPtr object.
operator=(std::nullptr_t)Stelt pointerwaarde in op nullptr.
operator==(std::nullptr_t) constControleert of pointer naar nullptr wijst.
operator[](IdxType) constAccessor voor array‑elementen. Compileert alleen als SmartPtr_ een specialisatie is van System::Array.
RemoveAliasing() constVerwijdert aliasing (gecreëerd door een aliasing‑constructor) van de pointer, en zorgt ervoor dat deze (indien gedeeld) beheert of (indien zwak) volgt hetzelfde object waarnaar hij wijst.
reset(Pointee_ *)Stelt het aangewezen object in.
reset()Laat de pointer naar nullptr wijzen.
set_Mode(SmartPtrMode)Stelt pointermodus in. Kan referentietellingen van het aangewezen object wijzigen.
SetContainedTemplateWeakPtr(uint32_t) constRoept de SetTemplateWeakPtr()-methode aan op het aangewezen object (indien aanwezig).
SmartPtr(SmartPtrMode)Maakt een SmartPtr object aan in de vereiste modus.
SmartPtr(std::nullptr_t, SmartPtrMode)Maakt een null‑pointer SmartPtr object aan in de vereiste modus.
SmartPtr(Pointee_ *, SmartPtrMode)Maakt een SmartPtr aan die naar het opgegeven object wijst, of converteert een ruwe pointer naar een SmartPtr.
SmartPtr(const SmartPtr_&, SmartPtrMode)Kopieert een SmartPtr object. Beide pointers wijzen daarna naar hetzelfde object.
SmartPtr(const SmartPtr<Q>&, SmartPtrMode)Kopieert een SmartPtr object. Beide pointers wijzen daarna naar hetzelfde object. Voert typeconversie uit indien toegestaan.
SmartPtr(SmartPtr_&&, SmartPtrMode)Verplaatst een SmartPtr object. Effectief worden twee pointers verwisseld, als ze beide dezelfde modus hebben. x kan na de oproep onbruikbaar zijn.
explicit SmartPtr(const SmartPtr<Array<Y>>&, SmartPtrMode)Converteert het type van de gerefereerde array door een nieuwe array van een ander type te maken. Handig als er in C# een array‑typecast bestaat die niet wordt ondersteund in C++.
explicit SmartPtr(const Y&)Initialiseert een lege array. Wordt gebruikt om sommige C#‑codeconstructies te vertalen.
SmartPtr(const SmartPtr<P>&, Pointee_ *, SmartPtrMode)Construeert een SmartPtr die eigendomsinformatie deelt met de initiële waarde van ptr, maar een niet‑gerelateerde en onbeheerde pointer p bevat.
static_pointer_cast() constCast pointer naar een ander type met static_cast op het aangewezen object.
ToObjectPtr() constConverteert elk pointertype naar een pointer naar Object. Vereist niet dat het type Pointee_ compleet is.
static Type()Snelkoppeling om het System::TypeInfo object voor het type Pointee_ te verkrijgen.
~SmartPtr()Vernietigt het SmartPtr object. Indien nodig verlaagt het de referentieteller van het aangewezen object en verwijdert het object.

Typedefs

TypedefBeschrijving
ArrayTypeHetzelfde als Pointee_, als het een specialisatie is van System::Array, en anders void.
Pointee_Gewezen type.
SmartPtr_Gespecialiseerd smart‑pointer type.
ValueTypeOpslagtype van aangewezen array. Alleen zinvol als T een specialisatie is van System::Array.

Zie ook