Cómo nuevas obras

La asignación-expresión — la expresión que contiene el operador de nuevo — realiza tres cosas:

  • Busque y reserva el almacenamiento para que el objeto u objetos es asignado.Cuando se completa esta fase, la cantidad correcto de almacenamiento se asigna, pero no es todavía un objeto.

  • Inicializa el objeto.Una vez completada la inicialización, suficiente información está presente para que el almacenamiento asignado es un objeto.

  • devuelve un puntero a los objetos de un tipo de puntero derivado de nuevo-tipo- nombre o de nombre de tipo.El programa utiliza este puntero para tener acceso al objeto recién asignado.

el operador de nuevo invoca la función operator new.Para las matrices de cualquier tipo, y para objetos que no son de clase, de struct, o el tipo de union , una función global, :: operador nuevo, se llama a para asignar almacenamiento.Los objetos de tipo de clase pueden definir su propia función miembro estática de operator new según la por-clase.

Cuando el compilador encuentra el operador de nuevo para asignar un objeto de typeescrito, emite una llamada a type**:: operador new (sizeof (** type))o, si no hay operator new definido por el usuario definido, :: operador new (sizeof ( type)).Por consiguiente, el operador de nuevo puede asignar la cantidad de memoria correcta para el objeto.

[!NOTA]

El argumento en operator new es de size_tescrito.Este tipo se define en DIRECT.H, MALLOC.H, MEMORY.H, SEARCH.H, STDDEF.H, STDIO.H, STDLIB.H, STRING.H, y TIME.H.

Una opción en la gramática permite la especificación de la posición (vea la gramática para nuevo operador).El parámetro de posición sólo se puede utilizar para las implementaciones definido por el usuario de operator new; permite definir información adicional se pasa a operator new.Una expresión con un campo de posición como T *TObject = new ( 0x0040 ) T; se convierte en T *TObject = T::operator new( sizeof( T ), 0x0040 ); si la clase t tiene un operador de miembro nuevo, si no a T *TObject = ::operator new( sizeof( T ), 0x0040 );.

La intención original del campo de la posición es permitir que los objetos subordinados están asignados en las direcciones definidas por el usuario.

[!NOTA]

Aunque en el ejemplo anterior sólo muestra un argumento en el campo de la posición , no hay ninguna restricción en cuántos argumentos adicionales se pueden pasar a operator new esta forma.

Aunque operator new se ha definido para un tipo de clase, el operador global se puede utilizar con el formulario de este ejemplo:

T *TObject =::new TObject;

El operador de resolución de ámbito (::) fuerza el uso del operador global de nuevo .

Vea también

Referencia

operador new (C++)