classe ref et struct ref (C++/CLI et C++/CX)
Les extensions classe ref ou struct ref déclarent une classe ou un struct dont la durée de vie des objets est automatiquement administrée. Lorsque l’objet n’est plus accessible ou se trouve hors de portée, la mémoire est libérée.
Tous les runtimes
Syntaxe
class_access ref class name modifier : inherit_access base_type {};
class_access ref struct name modifier : inherit_access base_type {};
class_access value class name modifier : inherit_access base_type {};
class_access value struct name modifier : inherit_access base_type {};
Paramètres
class_access
(Facultatif) Accessibilité de la classe ou du struct en dehors de l’assembly. Les valeurs possibles sont public
et private
(private
est la valeur par défaut). Les classes ou structs imbriqués ne peuvent pas avoir de spécificateur class_access.
nom
Nom de la classe ou du struct.
modifier
(Facultatif) abstract et sealed sont des modificateurs valides.
inherit_access
(Facultatif) Accessibilité de base_type. La seule accessibilité autorisée est public
(public
est la valeur par défaut).
base_type
(Facultatif) Le type de base. Toutefois, un type valeur ne peut pas agir comme un type de base.
Pour plus d’informations, consultez les descriptions propres aux langages de ce paramètre dans les sections Windows Runtime et Common Language Runtime.
Notes
L’accessibilité membre par défaut d’un objet déclaré avec la classe ref ou la classe de valeur est private
. Et l’accessibilité de membre par défaut d’un objet déclaré avec le struct ref ou le struct de valeur est public
.
Quand un type référence hérite d’un autre type référence, les fonctions virtuelles dans la classe de base doivent être explicitement remplacées (avec override) ou masquées (avec new (nouvel emplacement dans vtable)). Les fonctions de classe dérivées doivent également être explicitement marquées comme virtual
.
Pour détecter au moment de la compilation si un type est une classe ref ou un struct ref, ou une classe value ou un struct value, utilisez __is_ref_class (type)
, __is_value_class (type)
, ou __is_simple_value_class (type)
. Pour plus d’informations, consultez Compiler Support for Type Traits (Prise en charge du compilateur pour les caractéristiques de type).
Pour plus d'informations sur les classes et structs, consultez
Destructeurs et finaliseurs dans How to : Define and consume classes and structs (C++/CLI)
Guide pratique pour inclure une classe native dans un wrapper pour une utilisation par C#
Windows Runtime
Notes
Consultez Classes et structures de référence et Classes de valeur et structures de valeur.
Paramètres
base_type
(Facultatif) Le type de base. Une classe ref ou un struct ref peuvent hériter de zéro interface ou plus et de zéro ou un type ref. Une classe value ou un struct value peuvent uniquement hériter de zéro interface ou plus.
Quand vous déclarez un objet à l’aide des mots clés ref class ou ref struct, l’objet est accessible par un descripteur, autrement dit, un pointeur de compteur de référence vers l’objet. Quand la variable déclarée est hors de portée, le compilateur supprime automatiquement l'objet sous-jacent. Quand l'objet est utilisé en tant que paramètre dans un appel ou qu'il est stocké dans une variable, un handle vers l'objet est réellement transmis ou stocké.
Quand vous déclarez un objet à l’aide des mots clés value class ou value struct, la durée de vie de l’objet déclaré n’est pas contrôlée. L'objet est comme toute autre classe ou tout autre struct C++ standard.
Spécifications
Option du compilateur : /ZW
Common Language Runtime
Notes
Le tableau suivant répertorie les différences spécifiques à C++/CLI par rapport à la syntaxe indiquée dans la section Tous les runtimes.
Paramètres
base_type
(Facultatif) Le type de base. Une classe ref ou un struct ref peuvent hériter de zéro interface managée ou plus et de zéro ou un type ref. Une classe value ou un struct value peuvent uniquement hériter de zéro interface managée ou plus.
Les mots clés ref class et ref struct indiquent au compilateur que la classe ou le struct doivent être alloués sur le tas. Quand l'objet est utilisé en tant que paramètre dans un appel ou qu'il est stocké dans une variable, une référence à l'objet est réellement transmise ou stockée.
Les mots clés value class et value struct indiquent au compilateur que la valeur de la classe allouée ou du struct alloué est transmise aux fonctions ou stockée dans les membres.
Spécifications
Option du compilateur : /clr