operator new (<new>)
La función de asignación llama una nueva expresión para asignar el almacenamiento para una matriz de objetos.
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( );
Parámetros
_Count
El número de bytes de almacenamiento que se asignará para el objeto array._Ptr
El puntero que se devolverá.
Valor devuelto
Un puntero a la dirección de bytes más baja del almacenamiento asignado recientemente.o _Ptr.
Comentarios
La primera función se llama por una expresión de new[] para asignar los bytes de _Count de almacenamiento cómodamente alineadas para representar cualquier objeto de matriz de ese tamaño o menor.El programa puede definir una función con esta firma de la función que reemplace la versión predeterminada definida por la biblioteca estándar de C++.El comportamiento necesario es igual que para operador nuevo(size_t).el comportamiento predeterminado es devolver operator new(_Count).
La segunda función se llama por una expresión de new[] de posición para asignar los bytes de _Count de almacenamiento cómodamente alineadas para representar cualquier objeto de matriz de ese tamaño.El programa puede definir una función con esta firma de la función que reemplace la versión predeterminada definida por la biblioteca estándar de C++.El comportamiento predeterminado es devolver operador nuevo(_Count) si esa función correctamente.De lo contrario, devuelve un puntero NULL.
La tercera función se llama por una expresión de new[] de la posición, el formulario nuevo (args) T[N].Aquí, args constan de un solo puntero de objeto.la función devuelve _Ptr.
El almacenamiento libre asignado por operator new[], llamada operador delete [].
Para obtener información sobre el comportamiento que produce o nonthrowing de nuevo, vea Los operadores new y delete.
Ejemplo
// 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;
}
Resultados del ejemplo
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
Requisitos
encabezado: <nuevo>
espacio de nombres: std