operator new (<new>)
La función llamada por una expresión nueva para asignar el almacenamiento para objetos individuales.
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( );
Parámetros
_Count
El número de bytes de almacenamiento que se va a asignar._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 llaman una nueva expresión para asignar los bytes de _Count de almacenamiento alineados convenientemente para representar cualquier objeto de ese tamaño. El programa puede definir una función alternativa a esta firma de la función que reemplace la versión predeterminada definida por la biblioteca estándar de C++ y así que puede reemplazarse.
El comportamiento necesario es devolver un puntero no nulo sólo si el almacenamiento se puede asignar como se solicitan. Cada una asignación produce un puntero al almacenamiento disjunto de cualquier otro almacenamiento asignado. El orden y la contigu! edad de almacenamiento asignados por llamadas sucesivas no está especificado. El valor almacenado inicial no está especificado. Los puntos devueltos de puntero a inicio (dirección de byte más baja) de almacenamiento asignado. Si el número es cero, el valor devuelto no es igual a ningún otro valor devuelto por la función.
El comportamiento predeterminado es ejecutar un bucle. En el bucle, la función primera intenta asignar el almacenamiento solicitado. Si el intento requiere una llamada a malloc(size_t) no está especificado. Si la intención es correcto, la función devuelve un puntero al almacenamiento asignado. Si no, la función nuevo controladordesignado. Si la función llamada vuelve, el bucle se repite. Finalizará el bucle cuando un intento de asignar el almacenamiento solicitado es correcto o cuando una función denominada no cambia.
El comportamiento necesario de un nuevo controlador es realizar una de las operaciones siguientes:
Cree más almacenamiento disponible para la asignación y vuelva.
Llame a abort o exit(int).
Genere un objeto de **bad_alloc.**tipo
El comportamiento predeterminado de nuevo controlador es iniciar un objeto de bad_allocescrito. Un puntero NULL señala al nuevo controlador predeterminado.
El orden y la contigu! edad de almacenamiento asignados por llamadas sucesivas a operator new(size_t) no se especifica, al igual que los valores iniciales almacenados allí.
La segunda función llaman una nueva expresión de posición para asignar los bytes de _Count de almacenamiento alineados convenientemente para representar cualquier objeto de ese tamaño. El programa puede definir una función alternativa a esta firma de la función que reemplace la versión predeterminada definida por la biblioteca estándar de C++ y así que puede reemplazarse.
El comportamiento predeterminado es devolver operator new(_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, del control t new de formulario (args). Aquí, args constan de un solo puntero de objeto. Esto puede ser útil para construir un objeto en una dirección conocida. La función devuelve el _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_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;
}
Resultado del ejemplo
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
Requisitos
Encabezado: <nuevo>
Espacio de nombres: std