operator new[] (<new>)
La funzione di allocazione chiamata da un'espressione new per allocare memoria per una 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 array._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 di new[] per allocare i byte di _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 la libreria C++ standard. Il comportamento richiesto è lo stesso di operatore new(size_t). Il comportamento predefinito prevede di restituire operator new(_Count).
La seconda funzione viene chiamata da un'espressione di new[] location per allocare i byte di _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 la libreria C++ standard. Il comportamento predefinito prevede di restituire operatore nuova(_Count) se la funzione ha esito positivo. In caso contrario, restituisce un puntatore null.
La terza funzione viene chiamata da un'espressione di new[] location, del modulo nuova (args) T[]N. In questo caso, gli argomenti è costituito da un singolo puntatore a un oggetto. La funzione restituisce _Ptr.
In lo spazio di memoria libera allocata da operator new[], chiamata l'operatore delete [].
Per informazioni sul comportamento che genera o nonthrowing di nuovo, vedere Gli operatori new 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: <nuovo>
Spazio dei nomi: std