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.