Partager via


operator new (<new>)

La fonction d'allocation appelée par une nouvelle expression pour allouer de la mémoire pour un tableau d'objets.

void *operator new[](
   std::size_t _Count
)
   throw(std::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
    Le nombre d'octets de mémoire à allouer de l'objet table.

  • _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 expression d' new[] pour allouer des octets d' _Count de mémoire correctement alignés pour représenter tout objet tableau de cette taille ou le plus petit.Le programme peut définir une fonction avec cette signature de la fonction qui remplace la version par défaut définie par la bibliothèque C++ standard.Le comportement requis est le même que opérateur new(size_t).Le comportement par défaut consiste à retourner operator new(_Count).

La deuxième fonction est appelée par une expression d' new[] de positionnement pour allouer des octets d' _Count de mémoire correctement alignés pour représenter tout objet tableau de cette taille.Le programme peut définir une fonction avec cette signature de la fonction qui remplace la version par défaut définie par la bibliothèque C++ standard.Le comportement par défaut consiste à retourner operatornew(_Count) si cette fonction réussit.Sinon, il retourne un pointeur null.

La troisième fonction est appelée par une expression d' new[] de positionnement, du formulaire new (args) T[]N.Ici, les args se compose d'un pointeur d'objet unique.La fonction retourne _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_alloc.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[2];
   delete[ ] fPtr;

   // The second form of new delete
   char x[2 * sizeof( MyClass ) + sizeof(int)];
   
   MyClass* fPtr2 = new( &x[0] ) MyClass[2];
   fPtr2[1].~MyClass();
   fPtr2[0].~MyClass();
   cout << "The address of x[0] is : " << ( void* )&x[0] << endl;

   // The third form of new delete
   MyClass* fPtr3 = new( nothrow ) MyClass[2];
   delete[ ] fPtr3;
}

Résultat de l'exemple

Construction MyClass.00311AEC
Construction MyClass.00311AF0
Destructing MyClass.00311AF0
Destructing MyClass.00311AEC
Construction MyClass.0012FED4
Construction MyClass.0012FED8
Destructing MyClass.0012FED8
Destructing MyClass.0012FED4
The address of x[0] is : 0012FED0
Construction MyClass.00311AEC
Construction MyClass.00311AF0
Destructing MyClass.00311AF0
Destructing MyClass.00311AEC

Configuration requise

en-tête : <new>

l'espace de noms : DST

Voir aussi

Référence

nothrow_t Structure

operator delete[] (<new>)