Classe System::SmartPtr

SmartPtr class

Classe de pointeur pour encapsuler les types alloués sur le tas. Utilisez‑la pour gérer la mémoire des classes héritant de Object. Ce type de pointeur suit la sémantique des pointeurs intrusifs. Le compteur de références est stocké soit dans Object lui‑même, soit dans une structure de compteur liée étroitement à l’instance de Object. Dans tous les cas, toutes les instances de SmartPtr forment un groupe de possession unique, quel que soit leur mode de création, ce qui diffère du comportement de la classe std::shared_ptr. Convertir un pointeur brut en SmartPtr est sûr tant qu’il existe d’autres instances de SmartPtr détenant des références partagées au même objet. Une instance de la classe SmartPtr peut être dans l’un des deux états : pointeur partagé et pointeur faible. Pour garder l’objet vivant, le nombre de références partagées doit rester positif. Les pointeurs faibles et partagés peuvent être utilisés pour accéder à l’objet pointé (appeler des méthodes, lire ou écrire des champs, etc.), mais les pointeurs faibles ne participent pas au comptage des références du pointeur partagé. Object est supprimé lorsque le dernier pointeur ‘shared’ SmartPtr qui le référence est détruit. Ainsi, assurez‑vous que cela ne se produise pas lorsqu’aucun autre pointeur partagé SmartPtr n’existe, par ex. pendant la construction ou la destruction de l’objet. Utilisez les objets sentinelles System::Object::ThisProtector (dans le code C++) ou les attributs CppCTORSelfReference ou CppSelfReference (dans le code C# traduit) pour corriger ce problème. De même, assurez‑vous de rompre les références cycliques en utilisant la classe de pointeur System::WeakPtr ou le mode de pointeur System::SmartPtrMode::Weak (dans le code C++) ou l’attribut CppWeakPtr (dans le code C# traduit). Si deux objets ou plus se référencent mutuellement à l’aide de pointeurs ‘shared’, ils ne seront jamais supprimés. Si le type de pointeur (faible ou partagé) doit être changé à l’exécution, utilisez la méthode System::SmartPtr::set_Mode() ou la classe System::DynamicWeakPtr. La classe SmartPtr ne contient aucune méthode virtuelle. Vous ne devez l’hériter que si vous créez votre propre stratégie de gestion de mémoire. Ce type est un pointeur pour gérer la suppression d’un autre objet. Il doit être alloué sur la pile et passé aux fonctions soit par valeur, soit par référence constante.

template<class T>class SmartPtr
ParamètreDescription
TType de l’objet pointé. Doit être soit System::Object, soit une sous‑classe de celui‑ci.

Méthodes

MéthodeDescription
begin()Accesseur de la méthode begin() d’une collection sous‑jacente. Ne compile que si SmartPtr_ est un type spécialisé possédant la méthode begin().
begin() constAccesseur de la méthode begin() d’une collection sous‑jacente. Ne compile que si SmartPtr_ est un type spécialisé possédant la méthode begin().
Cast() constConvertit le pointeur en son propre type.
Cast() constConvertit le pointeur en type de base en utilisant static_cast.
Cast() constConvertit le pointeur en type dérivé en utilisant dynamic_cast.
Cast() constConvertit le pointeur en type dérivé en utilisant dynamic_cast.
cbegin() constAccesseur de la méthode cbegin() d’une collection sous‑jacente. Ne compile que si SmartPtr_ est un type spécialisé possédant la méthode cbegin().
cend() constAccesseur de la méthode cend() d’une collection sous‑jacente. Ne compile que si SmartPtr_ est un type spécialisé possédant la méthode cend().
const_pointer_cast() constConvertit le pointeur en un type différent en utilisant const_cast sur l’objet pointé.
dynamic_pointer_cast() constConvertit le pointeur en un type différent en utilisant dynamic_cast sur l’objet pointé.
end()Accesseur de la méthode end() d’une collection sous‑jacente. Ne compile que si SmartPtr_ est un type spécialisé possédant la méthode end().
end() constAccesseur de la méthode end() d’une collection sous‑jacente. Ne compile que si SmartPtr_ est un type spécialisé possédant la méthode end().
get() constObtient l’objet pointé.
get_Mode() constObtient le mode du pointeur.
get_shared() constObtient l’objet pointé, mais affirme que le pointeur est en mode partagé.
get_shared_count() constObtient le nombre de pointeurs partagés existants vers l’objet référencé, y compris le pointeur actuel. Affirme que le pointeur actuel est en mode partagé.
GetHashCode() constAppelle GetHashCode() sur l’objet pointé.
GetObjectNotNull() constObtient l’objet actuellement référencé (le cas échéant) ou lève une exception.
GetObjectOrNull() constObtient l’objet pointé (le cas échéant) ou nullptr. Identique à get().
GetObjectOwner() constObtient l’objet référencé.
GetPointer() constObtient l’objet pointé (le cas échéant) ou nullptr. Identique à get().
Is(const System::TypeInfo&) constVérifie si l’objet pointé est d’un type spécifique ou d’un type dérivé. Suit la sémantique ‘is’ de C#.
IsAliasingPtr() constVérifie si le pointeur pointe vers un autre objet que celui possédé (créé par un constructeur d’alias).
IsShared() constVérifie si le pointeur est en mode partagé.
IsWeak() constVérifie si le pointeur est en mode faible.
explicit operator bool() constVérifie si le pointeur n’est pas nul.
operator!() constVérifie si le pointeur est nul.
operator*() constObtient une référence à l’objet pointé. Affirme que le pointeur n’est pas nul.
operator->() constPermet d’accéder aux membres de l’objet référencé.
operator<(Y *) constFournit une sémantique de comparaison inférieure pour la classe SmartPtr.
operator<(SmartPtr<Y> const&) constFournit une sémantique de comparaison inférieure pour la classe SmartPtr.
operator=(SmartPtr_&&)Effectue une assignation par déplacement de l’objet SmartPtr. x devient inutilisable.
operator=(const SmartPtr_&)Effectue une assignation par copie de l’objet SmartPtr.
operator=(const SmartPtr<Q>&)Effectue une assignation par copie de l’objet SmartPtr. Effectue les conversions de type requises.
operator=(Pointee_ *)Assigne un pointeur brut à l’objet SmartPtr.
operator=(std::nullptr_t)Définit la valeur du pointeur à nullptr.
operator==(std::nullptr_t) constVérifie si le pointeur pointe vers nullptr.
operator[](IdxType) constAccesseur pour les éléments de tableau. Ne compile que si SmartPtr_ est une spécialisation de System::Array.
RemoveAliasing() constSupprime l’alias (créé par un constructeur d’alias) du pointeur, s’assure qu’il gère (si partagé) ou suit (si faible) le même objet vers lequel il pointe.
reset(Pointee_ *)Définit l’objet pointé.
reset()Fait pointer le pointeur vers nullptr.
set_Mode(SmartPtrMode)Définit le mode du pointeur. Peut modifier les compteurs de références de l’objet référencé.
SetContainedTemplateWeakPtr(uint32_t) constAppelle la méthode SetTemplateWeakPtr() sur l’objet pointé (le cas échéant).
SmartPtr(SmartPtrMode)Crée un objet SmartPtr du mode requis.
SmartPtr(std::nullptr_t, SmartPtrMode)Crée un objet SmartPtr nul du mode requis.
SmartPtr(Pointee_ *, SmartPtrMode)Crée un SmartPtr pointant vers l’objet spécifié, ou convertit un pointeur brut en SmartPtr.
SmartPtr(const SmartPtr_&, SmartPtrMode)Construit par copie un objet SmartPtr. Les deux pointeurs pointent ensuite vers le même objet.
SmartPtr(const SmartPtr<Q>&, SmartPtrMode)Construit par copie un objet SmartPtr. Les deux pointeurs pointent ensuite vers le même objet. Effectue une conversion de type si autorisée.
SmartPtr(SmartPtr_&&, SmartPtrMode)Construit par déplacement un objet SmartPtr. Effectivement, échange deux pointeurs s’ils sont tous deux du même mode. x peut devenir inutilisable après l’appel.
explicit SmartPtr(const SmartPtr<Array<Y>>&, SmartPtrMode)Convertit le type du tableau référencé en créant un nouveau tableau d’un type différent. Utile si, en C#, il existe un transtypage de tableau qui n’est pas pris en charge en C++.
explicit SmartPtr(const Y&)Initialise un tableau vide. Utilisé pour traduire certaines constructions de code C#.
SmartPtr(const SmartPtr<P>&, Pointee_ *, SmartPtrMode)Construit un SmartPtr qui partage les informations de propriété avec la valeur initiale de ptr, mais détient un pointeur p non lié et non géré.
static_pointer_cast() constConvertit le pointeur en un type différent en utilisant static_cast sur l’objet pointé.
ToObjectPtr() constConvertit tout type de pointeur en pointeur vers Object. Ne nécessite pas que le type Pointee_ soit complet.
static Type()Raccourci pour obtenir l’objet System::TypeInfo du type Pointee_.
~SmartPtr()Détruit l’objet SmartPtr. Si nécessaire, diminue le compteur de références de l’objet pointé et supprime l’objet.

Typedefs

TypedefDescription
ArrayTypeIdentique à Pointee_, s’il s’agit d’une spécialisation de System::Array, et void sinon.
Pointee_Type pointé.
SmartPtr_Type de pointeur intelligent spécialisé.
ValueTypeType de stockage du tableau pointé. Significatif uniquement si T est une spécialisation de System::Array.

Voir aussi