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 étroitement liée à l’instance de Object. Dans tous les cas, toutes les instances de SmartPtr forment un groupe de possession unique, quel que soit le 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 vers le 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 être 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. Veillez donc à ce que cela n’arrive pas lorsqu’aucun autre pointeur SmartPtr partagé vers l’objet n’existe, par exemple 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 vérifie que le pointeur est en mode partagé.
get_shared_count() constObtient le nombre de pointeurs partagés existant vers l’objet référencé, y compris le pointeur actuel. Vérifie 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 de ses sous‑types. Suit la sémantique C# ‘is’.
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é. Vérifie 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_&&)Attribue par déplacement l’objet SmartPtr. x devient inutilisable.
operator=(const SmartPtr_&)Attribue par copie l’objet SmartPtr.
operator=(const SmartPtr<Q>&)Attribue par copie l’objet SmartPtr. Effectue les conversions de type requises.
operator=(Pointee_ *)Assigne le 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 du tableau. Ne compile que si SmartPtr_ est une spécialisation de System::Array.
RemoveAliasing() constSupprime l’aliasing (créé par un constructeur d’aliasing) du pointeur, s’assure qu’il gère (si partagé) ou suit (si faible) le même objet auquel 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 comptes 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 l’objet SmartPtr. Les deux pointeurs pointent ensuite vers le même objet.
SmartPtr(const SmartPtr<Q>&, SmartPtrMode)Construit par copie l’objet SmartPtr. Les deux pointeurs pointent ensuite vers le même objet. Effectue la conversion de type si autorisée.
SmartPtr(SmartPtr_&&, SmartPtrMode)Construit par déplacement l’objet SmartPtr. Effectivement, échange deux pointeurs s’ils sont tous deux du même mode. x peut être 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 supporté 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 possession avec la valeur initiale de ptr, mais détient un pointeur p non lié et non géré.
static_pointer_cast() constConvertit le pointeur vers 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