Classe System::SmartPtr

SmartPtr class

Classe puntatore per avvolgere tipi allocati sull’heap. Usala per gestire la memoria delle classi che ereditano Object. Questo tipo di puntatore segue la semantica dei puntatori intrusivi. Il contatore di riferimento è memorizzato o in Object stesso o nella struttura contatore strettamente legata all’istanza di Object. In ogni caso, tutte le istanze di SmartPtr formano un unico gruppo di proprietà indipendentemente da come sono state create, il che è diverso dal comportamento della classe std::shared_ptr. Convertire un puntatore grezzo in SmartPtr è sicuro poiché esistono altre istanze di SmartPtr che mantengono riferimenti condivisi allo stesso oggetto. Un’istanza della classe SmartPtr può trovarsi in uno dei due stati: puntatore condiviso e puntatore debole. Per mantenere vivo l’oggetto, il conteggio dei riferimenti condivisi deve essere positivo. Sia i puntatori deboli che quelli condivisi possono essere usati per accedere all’oggetto puntato (per chiamare metodi, leggere o scrivere campi, ecc.), ma i puntatori deboli non partecipano al conteggio dei riferimenti condivisi. Object viene eliminato quando l’ultimo puntatore ‘shared’ SmartPtr ad esso viene distrutto. Quindi, assicurati che ciò non accada quando non esistono altri puntatori SmartPtr condivisi all’oggetto, ad es. durante la costruzione o la distruzione dell’oggetto. Usa gli oggetti sentinella System::Object::ThisProtector (nel codice C++) o gli attributi CppCTORSelfReference o CppSelfReference (nel codice C# tradotto) per risolvere questo problema. Allo stesso modo, assicurati di rompere i riferimenti ciclici usando la classe puntatore System::WeakPtr o la modalità puntatore System::SmartPtrMode::Weak (nel codice C++) o l’attributo CppWeakPtr (nel codice C# tradotto). Se due o più oggetti si riferiscono reciprocamente usando puntatori ‘shared’, non verranno mai eliminati. Se il tipo di puntatore (debole o condiviso) deve essere cambiato a runtime, usa il metodo System::SmartPtr::set_Mode() o la classe System::DynamicWeakPtr. La classe SmartPtr non contiene metodi virtuali. Dovresti ereditarla solo se stai creando una tua strategia di gestione della memoria. Questo tipo è un puntatore per gestire la cancellazione di altri oggetti. Deve essere allocato sullo stack e passato alle funzioni per valore o per riferimento costante.

template<class T>class SmartPtr
ParametroDescrizione
TTipo dell’oggetto puntato. Deve essere o System::Object o una sua sottoclasse.

Metodi

MetodoDescrizione
begin()Accessor per il metodo begin() di una collezione sottostante. Compila solo se SmartPtr_ è un tipo specializzato con il metodo begin().
begin() constAccessor per il metodo begin() di una collezione sottostante. Compila solo se SmartPtr_ è un tipo specializzato con il metodo begin().
Cast() constCasta il puntatore al suo stesso tipo.
Cast() constCasta il puntatore al tipo base usando static_cast.
Cast() constCasta il puntatore al tipo derivato usando dynamic_cast.
Cast() constCasta il puntatore al tipo derivato usando dynamic_cast.
cbegin() constAccessor per il metodo cbegin() di una collezione sottostante. Compila solo se SmartPtr_ è un tipo specializzato con il metodo cbegin().
cend() constAccessor per il metodo cend() di una collezione sottostante. Compila solo se SmartPtr_ è un tipo specializzato con il metodo cend().
const_pointer_cast() constCasta il puntatore a un tipo diverso usando const_cast sull’oggetto puntato.
dynamic_pointer_cast() constCasta il puntatore a un tipo diverso usando dynamic_cast sull’oggetto puntato.
end()Accessor per il metodo end() di una collezione sottostante. Compila solo se SmartPtr_ è un tipo specializzato con il metodo end().
end() constAccessor per il metodo end() di una collezione sottostante. Compila solo se SmartPtr_ è un tipo specializzato con il metodo end().
get() constOttiene l’oggetto puntato.
get_Mode() constOttiene la modalità del puntatore.
get_shared() constOttiene l’oggetto puntato, ma verifica che il puntatore sia in modalità condivisa.
get_shared_count() constOttiene il numero di puntatori condivisi esistenti per l’oggetto di riferimento, incluso quello corrente. Verifica che il puntatore corrente sia in modalità condivisa.
GetHashCode() constChiama GetHashCode() sull’oggetto puntato.
GetObjectNotNull() constOttiene l’oggetto attualmente referenziato (se presente) o lancia un’eccezione.
GetObjectOrNull() constOttiene l’oggetto puntato (se presente) o nullptr. Uguale a get().
GetObjectOwner() constOttiene l’oggetto referenziato.
GetPointer() constOttiene l’oggetto puntato (se presente) o nullptr. Uguale a get().
Is(const System::TypeInfo&) constVerifica se l’oggetto puntato è di un tipo specifico o di un suo tipo figlio. Segue la semantica ‘is’ di C#.
IsAliasingPtr() constVerifica se il puntatore è puntato a un oggetto diverso da quello posseduto (creato da un costruttore di aliasing).
IsShared() constVerifica se il puntatore è in modalità condivisa.
IsWeak() constVerifica se il puntatore è in modalità debole.
explicit operator bool() constVerifica se il puntatore non è nullo.
operator!() constVerifica se il puntatore è nullo.
operator*() constOttiene un riferimento all’oggetto puntato. Verifica che il puntatore non sia nullo.
operator->() constConsente di accedere ai membri dell’oggetto referenziato.
operator<(Y *) constFornisce la semantica di confronto minore per la classe SmartPtr.
operator<(SmartPtr<Y> const&) constFornisce la semantica di confronto minore per la classe SmartPtr.
operator=(SmartPtr_&&)Assegna per spostamento l’oggetto SmartPtr. x diventa inutilizzabile.
operator=(const SmartPtr_&)Assegna per copia l’oggetto SmartPtr.
operator=(const SmartPtr<Q>&)Assegna per copia l’oggetto SmartPtr. Esegue le conversioni di tipo necessarie.
operator=(Pointee_ *)Assegna un puntatore grezzo all’oggetto SmartPtr.
operator=(std::nullptr_t)Imposta il valore del puntatore a nullptr.
operator==(std::nullptr_t) constVerifica se il puntatore punta a nullptr.
operator[](IdxType) constAccessor per gli elementi dell’array. Compila solo se SmartPtr_ è una specializzazione di System::Array.
RemoveAliasing() constRimuove l’aliasing (creato da un costruttore di aliasing) dal puntatore, assicurandosi che gestisca (se condiviso) o tracci (se debole) lo stesso oggetto a cui punta.
reset(Pointee_ *)Imposta l’oggetto puntato.
reset()Fa sì che il puntatore punti a nullptr.
set_Mode(SmartPtrMode)Imposta la modalità del puntatore. Può modificare i contatori di riferimento dell’oggetto referenziato.
SetContainedTemplateWeakPtr(uint32_t) constChiama il metodo SetTemplateWeakPtr() sull’oggetto puntato (se presente).
SmartPtr(SmartPtrMode)Crea un oggetto SmartPtr nella modalità richiesta.
SmartPtr(std::nullptr_t, SmartPtrMode)Crea un oggetto SmartPtr nullo nella modalità richiesta.
SmartPtr(Pointee_ *, SmartPtrMode)Crea un SmartPtr che punta all’oggetto specificato, oppure converte un puntatore grezzo in SmartPtr.
SmartPtr(const SmartPtr_&, SmartPtrMode)Costruisce per copia un oggetto SmartPtr. Entrambi i puntatori puntano allo stesso oggetto successivamente.
SmartPtr(const SmartPtr<Q>&, SmartPtrMode)Costruisce per copia un oggetto SmartPtr. Entrambi i puntatori puntano allo stesso oggetto successivamente. Esegue la conversione di tipo se consentita.
SmartPtr(SmartPtr_&&, SmartPtrMode)Costruisce per spostamento un oggetto SmartPtr. In pratica, scambia due puntatori, se entrambi sono della stessa modalità. x potrebbe diventare inutilizzabile dopo la chiamata.
explicit SmartPtr(const SmartPtr<Array<Y>>&, SmartPtrMode)Converte il tipo dell’array referenziato creando un nuovo array di tipo diverso. Utile se in C# esiste un cast di tipo array non supportato in C++.
explicit SmartPtr(const Y&)Inizializza un array vuoto. Usato per tradurre alcune costruzioni di codice C#.
SmartPtr(const SmartPtr<P>&, Pointee_ *, SmartPtrMode)Costruisce un SmartPtr che condivide le informazioni di proprietà con il valore iniziale di ptr, ma contiene un puntatore p non correlato e non gestito.
static_pointer_cast() constEsegue il cast del puntatore a un tipo diverso usando static_cast sull’oggetto puntato.
ToObjectPtr() constConverte qualsiasi tipo di puntatore in un puntatore a Object. Non richiede che il tipo Pointee_ sia completo.
static Type()Scorciatoia per ottenere l’oggetto System::TypeInfo per il tipo Pointee_.
~SmartPtr()Distrugge l’oggetto SmartPtr. Se necessario, decrementa il contatore di riferimento dell’oggetto puntato e lo elimina.

Typedefs

TypedefDescrizione
ArrayTypeStesso di Pointee_, se è una specializzazione di System::Array, altrimenti void.
Pointee_Tipo puntato.
SmartPtr_Tipo di smart pointer specializzato.
ValueTypeTipo di memorizzazione dell’array puntato. Ha senso solo se T è una specializzazione di System::Array.

Vedi anche