operator new (<new>)

Funzione chiamata da un'espressione new per rendere nuovamente disponibile l'archiviazione di singoli oggetti.

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

Parametri

  • _Count
    Numero di byte di archiviazione da allocare.

  • _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 una nuova espressione per allocare i byte _Count di archiviazione allineati in modo adeguato per rappresentare qualsiasi oggetto di tale dimensione.Il programma può definire una funzione alternativa a questa firma della funzione che sostituisce la versione predefinita definita dalla libreria C++ standard e pertanto è contenuto.

Il comportamento richiesto è di restituire un puntatore diverso da null solo se l'archiviazione possono essere allocati come richiesto.Ciascuna allocazione genera un puntatore all'archiviazione selezioni da un'altra memoria allocata.L'ordine e la contiguità di memoria allocati dalle chiamate successive è non specificati.Il valore memorizzato iniziale non è specificato.I punti restituiti del puntatore all'inizio (indirizzo di byte più basso) di archiviazione allocato.Se il conteggio è zero, il valore restituito non si confronta uguale a qualsiasi altro valore restituito dalla funzione.

Il comportamento predefinito prevede l'esecuzione di un ciclo.Nel ciclo, la funzione dapprima tenta di allocare la memoria richiesta.Se il tentativo include una chiamata a malloc(size_t) non è specificata.Se il tentativo riesce, la funzione restituisce un puntatore all'archiviazione allocato.In caso contrario, le chiamate di funzione nuovo gestoredefinito.Se restituisce chiamata di funzione, le ripetizioni del ciclo.Il ciclo termina quando un tentativo di allocazione della memoria richiesta ha esito positivo oppure quando una funzione chiamata non restituisce.

Il comportamento richiesto di nuovo gestore quello di eseguire una delle seguenti operazioni:

  • Rendere più archiviazione per l'allocazione e ritornare.

  • Chiamare abort o exit(int).

  • Genera un oggetto di tipo bad_alloc.

Il comportamento predefinito nuovo gestore è generare un oggetto di tipo bad_alloc.Un puntatore null definisce il nuovo gestore predefinito.

L'ordine e la contiguità di memoria allocati dalle chiamate successive a operator new(size_t) non è specificato, così come i valori iniziali archiviati in.

La seconda funzione viene chiamata da una nuova espressione di percorso per allocare i byte _Count di archiviazione allineati in modo adeguato per rappresentare qualsiasi oggetto di tale dimensione.Il programma può definire una funzione alternativa a questa firma della funzione che sostituisce la versione predefinita definita dalla libreria C++ standard e pertanto è contenuto.

Il comportamento predefinito prevede di restituire operator new(_Count) se la funzione ha esito positivo.In caso contrario, restituisce un puntatore null.

La terza funzione viene chiamata da un'espressione NUOVO di posizione, il form NUOVOargomenti(T).In questo caso, gli argomenti è costituito da un singolo puntatore a un oggetto.Questo può essere utile per la costruzione dell'oggetto a un indirizzo noto.La funzione restituisce il _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_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;
}

Output di esempio

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

Requisiti

intestazione: <new>

Spazio dei nomi: deviazione standard

Vedere anche

Riferimenti

new operator (STL Samples)

nothrow_t Structure

operator delete (<new>)