operator new delete c++ new-operator

delete - new keyword c++



¿Qué hace "new int(100)"? (4)

Posible duplicado:
es esta una variable o función

Por error, utilicé algo así como:

int *arr = new int(100);

y pasa compilación, pero sabía que esto está mal. Debería ser

int *arr = new int[100];

¿Qué piensa el compilador cuando escribí el incorrecto?


Asigna un objeto de tipo int y lo inicializa al valor 100 .

Mucha gente no sabe que puedes pasar un inicializador a uno new , hay un idioma particular que debería hacerse más conocido para evitar el uso de memset :

new int[100]();

Esto asignará una matriz de int y cero-initialize sus elementos.

Además, no debería usar una versión de matriz de new . Nunca. Hay std::vector para ese propósito.


El primero crea un único entero nuevo, lo inicializa al valor 100 y le devuelve un puntero.

En C / C ++ no hay diferencia entre un puntero a una matriz y un puntero a un único valor (un puntero a una matriz es, de hecho, solo un puntero a su primer elemento). Entonces esta es una forma válida de crear una matriz con un elemento.


Nueva cita de Wikipedia (C ++) :

int *p_scalar = new int(5); //allocates an integer, set to 5. (same syntax as constructors) int *p_array = new int[5]; //allocates an array of 5 adjacent integers. (undefined values)

ACTUALIZAR

En el artículo de Wikipedia actual new y delete (C ++), se elimina el ejemplo.

Además, aquí está la referencia C ++ menos intuitiva pero totalmente confiable para lo new y lo new[] .


La primera línea asigna un int único y lo inicializa a 100 . Piense en el int(100) como una llamada de constructor.

Como se trata de una asignación escalar, intentar acceder a arr[1] o liberar la memoria utilizando delete[] daría lugar a un comportamiento indefinido.