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 un'espressione new per allocare i byte di _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 la libreria C++ standard e pertanto è sostituibili.
Il comportamento è obbligatorio di restituire un puntatore diverso da null solo se la memoria può essere allocata come necessario. Ciascuna allocazione genera un puntatore all'archiviazione selezioni da un'altra memoria allocata. L'ordine e la contiguità di archiviazione allocati dalle chiamate successive è non specificati. Il valore memorizzato iniziale non è specificato. Gli elementi restituiti del puntatore all'inizio (indirizzo di byte inferiore della memoria allocata. 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 chiamati di funzione, le ripetizioni del ciclo. Il ciclo termina quando un tentativo di allocare la memoria richiesta viene completata oppure quando una funzione chiamata non restituisce.
Il comportamento richiesto di nuovo gestore è di eseguire una delle seguenti operazioni:
Rendere più archiviazione per l'allocazione e ritornare.
Chiamare Interrompi o uscita(int).
Genera un oggetto di tipo bad_alloc.
Il comportamento predefinito di nuovo gestore consiste nel generare un oggetto di tipo bad_alloc. Un puntatore null definisce il nuovo gestore predefinito.
L'ordine e la contiguità di archiviazione allocati dalle chiamate successive a operator new(size_t) non è specificato, così come i valori iniziali archiviati presenti.
La seconda funzione viene chiamata da un'espressione new location per allocare i byte di _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 la libreria C++ standard e pertanto è sostituibili.
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 di nuova location, del modulo nuova (args) T. In questo caso, gli argomenti è costituito da un singolo puntatore a un oggetto. Ciò può risultare utile per la costruzione dell'oggetto a un indirizzo noto. La funzione restituisce il _Ptr.
In lo spazio di memoria libera allocata da operator new, chiamata operatore delete.
Per informazioni sul comportamento che genera o nonthrowing di nuovo, vedere Gli operatori new 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: <nuovo>
Spazio dei nomi: std