operator new (<new>)

La funzione di allocazione chiamata da una nuova espressione per allocare memoria per la matrice di oggetti.

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( );

Parametri

  • _Count
    Il numero di byte di archiviazione da allocare per l'oggetto matrice.

  • _Ptr
    Il puntatore da restituire.

Valore restituito

Un puntatore all'indirizzo di byte più basso dell'archiviazione appena allocata.o _Ptr.

Note

La prima funzione viene chiamata da un'espressione new[] per allocare i byte _Count di archiviazione allineati in modo adeguato per rappresentare qualsiasi oggetto matrice di tale dimensione o più piccolo.Il programma può definire una funzione con la firma della funzione che sostituisce la versione predefinita definita dalla libreria standard di C++.Il comportamento richiesto è lo stesso di per operatore new(size_t).Il comportamento predefinito prevede di restituire operator new(_Count).

La seconda funzione viene chiamata da un'espressione new[] di percorso per allocare i byte _Count di archiviazione allineati in modo adeguato per rappresentare qualsiasi oggetto matrice di tale dimensione.Il programma può definire una funzione con la firma della funzione che sostituisce la versione predefinita definita dalla libreria standard di C++.Il comportamento predefinito prevede di restituire operatorNUOVO(_Count) se la funzione ha esito positivo.In caso contrario, restituisce un puntatore null.

La terza funzione viene chiamata da un'espressione new[] di posizione, il form NUOVO (arguments) T[]N.In questo caso, gli argomenti è costituito da un singolo puntatore a un oggetto.La funzione restituisce _Ptr.

Per liberare memoria allocata da operator new[], chiamata operator delete [].

Per informazioni sul comportamento che genera o nonthrowing di nuovo, vedere Il nuovo gli operatori e delete.

Esempio

// 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;
}

Esempio di output

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

Requisiti

intestazione: <new>

Spazio dei nomi: deviazione standard

Vedere anche

Riferimenti

nothrow_t Structure

operator delete[] (<new>)