System::SmartPtr-klass

SmartPtr class

Pointer-klass för att omsluta typer som allokeras på heapen. Använd den för att hantera minne för klasser som ärver Object. Denna pekartyp följer intrusiva pekarsemantik. Referensräknaren lagras antingen i Object självt eller i en räknarstruktur som är tätt knuten till Object-instansen. I alla fall bildar alla SmartPtr-instanser en enda ägandegrupp oavsett hur de skapades, vilket skiljer sig från hur std::shared_ptr‑klassen beter sig. Att konvertera en rå pekare till SmartPtr är säkert så länge det finns andra SmartPtr-instanser som håller delade referenser till samma objekt. En SmartPtr-klassinstans kan vara i ett av två tillstånd: delad pekare och svag pekare. För att hålla objektet levande bör antalet delade referenser vara positivt. Både svaga och delade pekare kan användas för att komma åt det pekade objektet (för att anropa metoder, läsa eller skriva fält osv.), men svaga pekare deltar inte i räknandet av delade pekare. Object tas bort när den sista ‘shared’ SmartPtr-pekaren till den förstörs. Se därför till att detta inte händer när inga andra delade SmartPtr-pekare till objektet finns, t.ex. under objektkonstruktion eller destruktion. Använd System::Object::ThisProtector‑vaktobjekt (i C++‑kod) eller CppCTORSelfReference eller CppSelfReference‑attribut (i C#‑kod som översätts) för att åtgärda detta problem. På liknande sätt, se till att bryta loopreferenser genom att använda System::WeakPtr‑pekarklass eller System::SmartPtrMode::Weak‑pekarläge (i C++‑kod) eller CppWeakPtr‑attribut (i C#‑kod som översätts). Om två eller fler objekt refererar till varandra med ‘shared’‑pekare kommer de aldrig att tas bort. Om pekartypen (svag eller delad) ska bytas vid körning, använd System::SmartPtr::set_Mode()-metoden eller System::DynamicWeakPtr-klassen. SmartPtr-klassen innehåller inga virtuella metoder. Du bör bara ärva den om du skapar en egen minneshanteringsstrategi. Denna typ är en pekare för att hantera andra objekts borttagning. Den bör allokeras på stacken och skickas till funktioner antingen som värde eller som konstant referens.

template<class T>class SmartPtr
ParameterBeskrivning
TTypen på det pekade objektet. Måste vara antingen System::Object eller en underklass till den.

Metoder

MetodBeskrivning
begin()Åtkomstmetod för begin()-metoden i en underliggande samling. Kompilerar endast om SmartPtr_ är en specialiseringstyp med begin()-metod.
begin() constÅtkomstmetod för begin()-metoden i en underliggande samling. Kompilerar endast om SmartPtr_ är en specialiseringstyp med begin()-metod.
Cast() constKastar pekare till dess egen typ.
Cast() constKastar pekare till basklass med static_cast.
Cast() constKastar pekare till avledd typ med dynamic_cast.
Cast() constKastar pekare till avledd typ med dynamic_cast.
cbegin() constÅtkomst för cbegin()‑metoden i en underliggande samling. Kompilerar endast om SmartPtr_ är en specialiseringstyp med cbegin()‑metod.
cend() constÅtkomst för cend()‑metoden i en underliggande samling. Kompilerar endast om SmartPtr_ är en specialiseringstyp med cend()‑metod.
const_pointer_cast() constKastar pekare till en annan typ med const_cast på det pekade objektet.
dynamic_pointer_cast() constKastar pekare till en annan typ med dynamic_cast på det pekade objektet.
end()Åtkomst för end()‑metoden i en underliggande samling. Kompilerar endast om SmartPtr_ är en specialiseringstyp med end()‑metod.
end() constÅtkomst för end()‑metoden i en underliggande samling. Kompilerar endast om SmartPtr_ är en specialiseringstyp med end()‑metod.
get() constHämtar det pekade objektet.
get_Mode() constHämtar pekarläget.
get_shared() constHämtar det pekade objektet, men påstår att pekaren är i delat läge.
get_shared_count() constHämtar antalet delade pekare som finns till det refererade objektet, inklusive den nuvarande. Påstår att den aktuella pekaren är i delat läge.
GetHashCode() constAnropar GetHashCode() på det pekade objektet.
GetObjectNotNull() constHämtar det för närvarande refererade objektet (om något) eller kastar ett undantag.
GetObjectOrNull() constHämtar det pekade objektet (om något) eller nullptr. Samma som get().
GetObjectOwner() constHämtar det refererade objektet.
GetPointer() constHämtar det pekade objektet (om något) eller nullptr. Samma som get().
Is(const System::TypeInfo&) constKontrollerar om det pekade objektet är av en specifik typ eller dess underordnade typ. Följer C#‑semantiken för ‘is’.
IsAliasingPtr() constKontrollerar om pekaren pekar på ett annat objekt än det ägda (skapat av en alias‑konstruktor).
IsShared() constKontrollerar om pekaren är i delat läge.
IsWeak() constKontrollerar om pekaren är i svagt läge.
explicit operator bool() constKontrollerar om pekaren inte är null.
operator!() constKontrollerar om pekaren är null.
operator*() constHämtar referens till det pekade objektet. Påstår att pekaren inte är null.
operator->() constTillåter åtkomst till medlemmar i det refererade objektet.
operator<(Y *) constTillhandahåller mindre‑jämförelse‑semantik för SmartPtr‑klassen.
operator<(SmartPtr<Y> const&) constTillhandahåller mindre‑jämförelse‑semantik för SmartPtr‑klassen.
operator=(SmartPtr_&&)Flytt-tilldelar SmartPtr objekt. x blir oanvändbart.
operator=(const SmartPtr_&)Kopierar-tilldelar SmartPtr objekt.
operator=(const SmartPtr<Q>&)Kopierar-tilldelar SmartPtr objekt. Gör nödvändiga typkonverteringar.
operator=(Pointee_ *)Tilldelar rå pekare till SmartPtr objekt.
operator=(std::nullptr_t)Sätter pekarvärde till nullptr.
operator==(std::nullptr_t) constKontrollerar om pekaren pekar på nullptr.
operator[](IdxType) constÅtkomstfunktion för arrayelement. Kompileras endast om SmartPtr_ är en specialisering av System::Array.
RemoveAliasing() constTar bort aliasering (skapad av en alias‑konstruktor) från pekaren, säkerställer att den hanterar (om delad) eller spårar (om svag) samma objekt som den pekar på.
reset(Pointee_ *)Sätter det pekade objektet.
reset()Gör pekaren pekande på nullptr.
set_Mode(SmartPtrMode)Sätter pekarläget. Kan ändra det refererade objektets referensräkningar.
SetContainedTemplateWeakPtr(uint32_t) constAnropar SetTemplateWeakPtr()-metoden på det pekade objektet (om någon).
SmartPtr(SmartPtrMode)Skapar SmartPtr objekt i önskat läge.
SmartPtr(std::nullptr_t, SmartPtrMode)Skapar null‑pekare SmartPtr objekt i önskat läge.
SmartPtr(Pointee_ *, SmartPtrMode)Skapar SmartPtr som pekar på specificerat objekt, eller konverterar rå pekare till SmartPtr.
SmartPtr(const SmartPtr_&, SmartPtrMode)Kopierar konstruerar SmartPtr objekt. Båda pekarna pekar på samma objekt efteråt.
SmartPtr(const SmartPtr<Q>&, SmartPtrMode)Kopierar konstruerar SmartPtr objekt. Båda pekarna pekar på samma objekt efteråt. Utför typkonvertering om tillåtet.
SmartPtr(SmartPtr_&&, SmartPtrMode)Flytt‑konstruerar SmartPtr objekt. Byter i praktiken två pekare, om de båda har samma läge. x kan bli oanvändbart efter anropet.
explicit SmartPtr(const SmartPtr<Array<Y>>&, SmartPtrMode)Konverterar typ av refererad array genom att skapa en ny array av annan typ. Användbart om det i C# finns en array‑typcast som inte stöds i C++.
explicit SmartPtr(const Y&)Initierar tom array. Används för att översätta vissa C#‑kodkonstruktioner.
SmartPtr(const SmartPtr<P>&, Pointee_ *, SmartPtrMode)Konstruerar en SmartPtr som delar ägandinformations med det ursprungliga värdet av ptr, men innehåller en orelaterad och ohanterad pekare p.
static_pointer_cast() constKastar pekaren till annan typ med static_cast på det pekade objektet.
ToObjectPtr() constKonverterar vilken pekartyp som helst till pekare till Object. Kräver inte att typen Pointee_ är komplett.
static Type()Genväg för att hämta System::TypeInfo-objekt för typen Pointee_.
~SmartPtr()Förstör SmartPtr objekt. Om nödvändigt minskar den det pekade objektets referensräknare och raderar objektet.

Typedefs

TypedefBeskrivning
ArrayTypeSamma som Pointee_, om det är en specialisering av System::Array, och void annars.
Pointee_Pekad typ.
SmartPtr_Specialiserad smart pekartyp.
ValueTypeLagringstyp för pekad array. Endast meningsfull om T är en specialisering av System::Array.

Se även