System::SmartPtr-klass

SmartPtr class

Pekarklass 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 intrusiv 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 vid liv bör antalet delade referenser till det 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 referensräkningen för delade pekare. Object tas bort när den sista ‘shared’ SmartPtr-pekaren till den förstörs. Så se 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 problemet. 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 under 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 raderingen av andra objekts. 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 pekaren till sin egen typ.
Cast() constKastar pekaren till basklassen med static_cast.
Cast() constKastar pekaren till en avledd typ med dynamic_cast.
Cast() constKastar pekaren till en avledd typ med dynamic_cast.
cbegin() constÅtkomstmetod för cbegin()-metoden i en underliggande samling. Kompilerar endast om SmartPtr_ är en specialiseringstyp med cbegin()-metod.
cend() constÅtkomstmetod för cend()-metoden i en underliggande samling. Kompilerar endast om SmartPtr_ är en specialiseringstyp med cend()-metod.
const_pointer_cast() constKastar pekaren till en annan typ med const_cast på det pekade objektet.
dynamic_pointer_cast() constKastar pekaren till en annan typ med dynamic_cast på det pekade objektet.
end()Åtkomstmetod för end()-metoden i en underliggande samling. Kompilerar endast om SmartPtr_ är en specialiseringstyp med end()-metod.
end() constÅtkomstmetod 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 aktuella. 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 en 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 klassen SmartPtr.
operator<(SmartPtr<Y> const&) constTillhandahåller mindre‑jämförelse‑semantik för klassen SmartPtr.
operator=(SmartPtr_&&)Flytttilldelar SmartPtr-objektet. x blir oanvändbart.
operator=(const SmartPtr_&)Kopierar och tilldelar SmartPtr-objektet.
operator=(const SmartPtr<Q>&)Kopierar och tilldelar SmartPtr-objektet. Utför nödvändiga typkonverteringar.
operator=(Pointee_ *)Tilldelar en rå pekare till SmartPtr-objektet.
operator=(std::nullptr_t)Sätter pekarvärdet till nullptr.
operator==(std::nullptr_t) constKontrollerar om pekaren pekar på nullptr.
operator[](IdxType) constÅtkomstmetod för array‑element. Kompileras endast om SmartPtr_ är en specialisering av System::Array.
RemoveAliasing() constTar bort aliasing (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 så att pekaren pekar på nullptr.
set_Mode(SmartPtrMode)Ställer in pekarläget. Kan ändra referensräkningen för det refererade objektet.
SetContainedTemplateWeakPtr(uint32_t) constAnropar SetTemplateWeakPtr()-metoden på det pekade objektet (om något).
SmartPtr(SmartPtrMode)Skapar ett SmartPtr-objekt i önskat läge.
SmartPtr(std::nullptr_t, SmartPtrMode)Skapar ett null‑pekare‑SmartPtr-objekt i önskat läge.
SmartPtr(Pointee_ *, SmartPtrMode)Skapar ett SmartPtr som pekar på angivet objekt, eller konverterar en rå pekare till SmartPtr.
SmartPtr(const SmartPtr_&, SmartPtrMode)Kopierar och konstruerar ett SmartPtr-objekt. Båda pekarna pekar på samma objekt efteråt.
SmartPtr(const SmartPtr<Q>&, SmartPtrMode)Kopierar och konstruerar ett SmartPtr-objekt. Båda pekarna pekar på samma objekt efteråt. Utför typkonvertering om det är tillåtet.
SmartPtr(SmartPtr_&&, SmartPtrMode)Flyttar och konstruerar ett SmartPtr-objekt. I praktiken byter två pekare plats, om de har samma läge. x kan bli oanvändbar efter anropet.
explicit SmartPtr(const SmartPtr<Array<Y>>&, SmartPtrMode)Konverterar typen på den refererade arrayen 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 en tom array. Används för att översätta vissa C#‑kodkonstruktioner.
SmartPtr(const SmartPtr<P>&, Pointee_ *, SmartPtrMode)Konstruerar ett SmartPtr som delar ägandinformation med det ursprungliga värdet av ptr, men som innehåller en orelaterad och ohanterad pekare p.
static_pointer_cast() constKastar pekaren till en annan typ med static_cast på det pekade objektet.
ToObjectPtr() constKonverterar vilken pekartyp som helst till en pekare till Object. Kräver inte att typen Pointee_ är komplett.
static Type()Genväg för att hämta ett System::TypeInfo-objekt för typen Pointee_.
~SmartPtr()Förstör ett SmartPtr-objekt. Om nödvändigt minskar det det pekade objektets referensräknare och raderar objektet.

Typedefs

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

Se även