2010-08-26 9 views
23

Cuando utilizo nueva [] para crear una matriz de mis clases:¿El nuevo [] llama al constructor predeterminado en C++?

int count = 10; 
A *arr = new A[count]; 

veo que llama a un constructor por defecto de Acount veces. Como resultado, arr tiene count objetos inicializados del tipo A. Pero si uso el mismo que para la construcción de una matriz int:

int *arr2 = new int[count]; 

que no se ha inicializado. Todos los valores son algo así como -842150451 aunque el constructor predeterminado de int asigna su valor a 0.

¿Por qué hay un comportamiento tan diferente? ¿No se llama solo un constructor predeterminado para los tipos incorporados?

+0

duplicado posible de [¿Cómo puedo hacer \ 'nueva \ [\] \' default-inicializar el array de tipos primitivos?] (Https : //stackoverflow.com/questions/2468203/how-can-i-make-new-default-initialize-the-array-of-primitive-types) – Suma

Respuesta

41

Ver the accepted answer a a very similar question. Cuando usa new[], cada elemento se inicializa con el constructor predeterminado, excepto cuando el tipo es de tipo incorporado. Los tipos incorporados se dejan individualizados de forma predeterminada.

Haber incorporado tipo de matriz por defecto-inicializado uso

new int[size](); 
+12

Guau, realmente no sabía que podría agregar llaves para inicializar por defecto los tipos incorporados. He estado trabajando con C++ durante años. ¡Eso es emocionante o muy triste! – aardvarkk

3

Los tipos incorporados no tienen un constructor predeterminado aunque en algunos casos pueden recibir un valor predeterminado.

Pero en su caso, new solo asigna suficiente espacio en la memoria para almacenar countint objetos, es decir. asigna sizeof<int>*count.

+0

Esto no es un verdadero constructor, sino una forma de inicializarlos. .. –

+2

@rubber boots: 'int i();' no inicializa un varaible llamado 'i'. Declara una función 'i' que devuelve un int. Puede que haya querido decir 'int i = int();' –

+1

@James: en C++ 0x, finalmente puede decir lo que quiere decir: 'int x {};' :) – fredoverflow

0

int no es una clase, es un tipo de datos integrado, por lo tanto, no se necesita ningún constructor para ello.

Cuestiones relacionadas