Il nuovo chiama il costruttore predefinito in C ++?

Quando uso new [] per creare un array delle mie classi:

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

Vedo che chiama un costruttore predefinito di A volte. Di conseguenza arr ha oggetti inizializzati count di tipo A Ma se uso la stessa cosa per build un array int:

 int *arr2 = new int[count]; 

non è inizializzato. Tutti i valori sono qualcosa come -842150451 sebbene il costruttore predefinito di int assegni il suo valore a 0 .

Perché c’è un comportamento così diverso? Un costruttore predefinito non viene chiamato solo per i tipi predefiniti?

Vedi la risposta accettata a una domanda molto simile . Quando si utilizza new[] ogni elemento viene inizializzato dal costruttore predefinito tranne quando il tipo è un tipo predefinito. I tipi predefiniti vengono lasciati unificati per impostazione predefinita.

Per utilizzare un tipo predefinito di array predefinito inizializzato

 new int[size](); 

I tipi predefiniti non hanno un costruttore predefinito anche se in alcuni casi possono ricevere un valore predefinito.

Ma nel tuo caso, il new assegna solo abbastanza spazio in memoria per memorizzare gli oggetti di count int , es. assegna dimensioni di sizeof*count .

int non è una class, è un tipo di dati incorporato, quindi non viene chiamato alcun costruttore.