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
.
int
non è una class, è un tipo di dati incorporato, quindi non viene chiamato alcun costruttore.