Partager via


operator new (<new>)

Fonction appelée par une nouvelle expression pour allouer le stockage pour les objets individuels.

void* operator new(
   std::size_t _Count
) throw(bad_alloc);
void* operator new(
   std::size_t _Count,        
   const std::nothrow_t&
) throw( );
void* operator new(
   std::size_t _Count, 
   void* _Ptr
) throw( );

Paramètres

  • _Count
    Nombre d'octets de stockage à allouer.

  • _Ptr
    Le pointeur à retourner.

Valeur de retour

Un pointeur vers l'adresse ayant le moins d'octets de la mémoire nouvellement allouée.Ou _Ptr.

Notes

La première fonction est appelée par une nouvelle expression pour allouer des octets d' _Count de mémoire correctement alignés pour représenter n'importe quel objet de cette taille.Le programme peut définir une autre fonction avec cette signature de la fonction qui remplace la version par défaut définie par la bibliothèque C++ standard et est remplaçables.

Le comportement requis est de retourner un pointeur non nul uniquement si la mémoire peut être allouée comme demandée.Chacune de ces allocations référence un pointeur vers la mémoire disjoignent de toute autre mémoire allouée.La commande et la contiguïté de la mémoire alloués par les appels successifs n'est pas spécifiée.La valeur signalée par initiale n'est pas spécifiée.Les points retournés de pointeur au point de départ (la plus basse adresse d'octets) de la mémoire allouée.Si le nombre est égal à zéro, la valeur retournée ne compare une valeur égale à aucune autre valeur retournée par la fonction.

Le comportement par défaut consiste à effectuer une boucle.Dans la boucle, les premiers tests de fonctions d'allocation de mémoire demandée.Si la tentative implique un appel à malloc(size_t) n'est pas spécifié.Si la tentative est réussie, la fonction retourne un pointeur vers la mémoire allouée.Sinon, les appels de fonction nouveau gestionnaireindiqué.Si la fonction appelée est retournée, les répétitions de boucle.La boucle se termine lorsqu'une tentative d'allocation de mémoire demandée est réussie ou lorsqu'une fonction appelée ne retourne pas.

Le comportement requis d'un nouveau gestionnaire est d'exécuter l'une des opérations suivantes :

  • Rendez plus de mémoire disponible pour l'allocation puis retournez.

  • Appelez abort ou exit(int).

  • Levez un objet de type bad_alloc.

Le comportement par défaut de nouveau gestionnaire est de lever un objet de type bad_alloc.Un pointeur null indique le nouveau gestionnaire par défaut.

La commande et la contiguïté de la mémoire alloués par les appels successifs à operator new(size_t) n'est pas spécifiée, de même que les valeurs initiales stockées à cet endroit.

La deuxième fonction est appelée par une nouvelle expression de positionnement pour allouer des octets d' _Count de mémoire correctement alignés pour représenter n'importe quel objet de cette taille.Le programme peut définir une autre fonction avec cette signature de la fonction qui remplace la version par défaut définie par la bibliothèque C++ standard et est remplaçables.

Le comportement par défaut consiste à retourner operator new(_Count) si cette fonction réussit.Sinon, il retourne un pointeur null.

La troisième fonction est appelée par une expression de new de positionnement, du formulaire new (argsT).Ici, les args se compose d'un pointeur d'objet unique.Cela peut être utile pour construire un objet à une adresse.La fonction retourne le _Ptr.

À l'espace de stockage libre alloué par operator new, appelez operator delete.

Pour plus d'informations sur le comportement est levée ou nonthrowing de nouveau, consultez Le nouveau les opérateurs et delete.

Exemple

// new_op_new.cpp
// compile with: /EHsc
#include<new>
#include<iostream>

using namespace std;

class MyClass 
{
public: 
   MyClass( )
   {
      cout << "Construction MyClass." << this << endl;
   };

   ~MyClass( )
   {
      imember = 0; cout << "Destructing MyClass." << this << endl;
   };
   int imember;
};

int main( ) 
{
   // The first form of new delete
   MyClass* fPtr = new MyClass;
   delete fPtr;

   // The second form of new delete
   MyClass* fPtr2 = new( nothrow ) MyClass;
   delete fPtr2;

   // The third form of new delete
   char x[sizeof( MyClass )];
   MyClass* fPtr3 = new( &x[0] ) MyClass;
   fPtr3 -> ~MyClass();
   cout << "The address of x[0] is : " << ( void* )&x[0] << endl;
}

Sortie de l'exemple

Construction MyClass.000B3F30
Destructing MyClass.000B3F30
Construction MyClass.000B3F30
Destructing MyClass.000B3F30
Construction MyClass.0023FC60
Destructing MyClass.0023FC60
The address of x[0] is : 0023FC60

Configuration requise

en-tête : <new>

l'espace de noms : DST

Voir aussi

Référence

new operator (STL Samples)

nothrow_t Structure

operator delete (<new>)