Partager via


Comment travail

L'allocation-expression - l'expression contenant l'opérateur de nouveau - effectue trois opérations :

  • Détecte et réserve le stockage pour que l'objet ou les objets sont alloués.Lorsque cette étape est terminée, la quantité correcte de stockage est allouée, mais ce n'est pas encore un objet.

  • initialise les objets.Une fois que l'initialisation est terminée, suffisamment d'informations sont présentes pour le stockage alloué soit un objet.

  • Retourne un pointeur à des objets d'un type pointeur dérivé du nouveau-type-nom ou du nom de type.Le programme utilise ce pointeur pour accéder à l'objet nouvellement alloué.

l'opérateur de nouveau appelle la fonction operator new.Pour les tableaux de tous types, et pour les objets qui ne sont pas de classe, d' struct, ou de types union, une fonction globale, : : operator new, est appelé pour allouer un stockage.les objets de Classe-type peuvent définir leur propre fonction membre statique d' operator new sur une base de par-classe.

Lorsque le compilateur rencontre l'opérateur de nouveau pour allouer un objet de type type, il fournit un appel à type**: : operator new (sizeof (** type))ou, si aucun operator new défini par l'utilisateur n'est défini, : : operator new (sizeof ( type)).Par conséquent, l'opérateur de nouveau peut allouer la quantité correcte de mémoire à l'objet.

[!REMARQUE]

L'argument en operator new est de type size_t.ce type est défini dans DIRECT.H, MALLOC.H, MEMORY.H, SEARCH.H, STDDEF.H, STDIO.H, STDLIB.H, STRING.H, et TIME.H.

Une option dans la syntaxe permet la spécification du positionnement (consultez la grammaire pour opérateur new).Le paramètre de positionnement peut être utilisé que pour les implémentations définies par l'utilisateur d' operator new; il permet des informations supplémentaires à passer à operator new.Une expression à un champ de positionnement tel qu' T *TObject = new ( 0x0040 ) T; est traduite en T *TObject = T::operator new( sizeof( T ), 0x0040 ); si la classe T a un opérateur membre nouveau, sinon à T *TObject = ::operator new( sizeof( T ), 0x0040 );.

L'objectif premier du champ de positionnement est de permettre à des objets de matériel-dépendant à allouer aux adresses spécifiées par l'utilisateur.

[!REMARQUE]

Bien que l'exemple précédent montre un seul argument dans le domaine de positionnement , il n'existe aucune restriction sur le nombre d'arguments supplémentaires peuvent être passés à operator new de cette façon.

Même si operator new a été défini pour un type de classe, l'opérateur global peut être utilisé à l'aide de la forme de cet exemple :

T *TObject =::new TObject;

L'utilisation de avantages d'opérateur de résolution de portée (::) de l'opérateur global de nouveau .

Voir aussi

Référence

l'opérateur new (C++)