¿El nuevo llama al constructor predeterminado en C ++?

Cuando uso new [] para crear una matriz de mis clases:

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

Veo que llama a un constructor predeterminado de A count times. Como resultado, arr count objetos inicializados de tipo A Pero si uso lo mismo para construir una matriz int:

 int *arr2 = new int[count]; 

no está 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?

Ver la respuesta aceptada a una pregunta muy similar . Cuando usa new[] cada elemento es inicializado por el constructor predeterminado excepto cuando el tipo es un tipo incorporado. Los tipos incorporados se dejan individualizados de forma predeterminada.

Para tener un built-in type array default-initialized use

 new int[size](); 

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

Pero en su caso, el new simplemente asigna suficiente espacio en la memoria para almacenar el count objetos, es decir. asigna sizeof*count .

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