Diciamo che sta creando una serie di objectes sul mucchio in questo modo:Perché C non ++ consentono `new` chiamare costruttore durante la creazione di array
myClass * objectPtr = new myClass[10];
new
invoca solo il costruttore di default, e (sulla base degli le mie letture) non consente ad alcun altro costruttore di essere invocato.
C'è qualche logica dietro perché new
non può richiamare nessun altro costruttore? Sembrerebbe meglio fare qualcosa di simile
myClass * objectPtr = new myClass[10](12);
al contrario di
myClass * objectPtr = new myClass[10];
objectPtr[0] = myClass(12);
objectPtr[1] = myClass(12);
...
'-1' per il puntatore raw e' new' in una riga di codice. Anche la domanda non è particolarmente ragionevole, considerando che non sta solo usando puntatori grezzi, decadimento e allocazioni inutili, ma si concentra anche sulla creazione di array C grezzi che è sostanzialmente discutibile. IOW la risposta potrebbe essere "perché non usare i C array" (e tutte le cose di cui sopra). –
FWIW, si può fare ciò con 'std :: vector', ad esempio' std :: vector foo (10, myClass (12)); ' –
AndyG
_'Perché C++ non consente a' new' di chiamare il costruttore durante la creazione di array '_ Perché questo non si adatta alla sintassi effettiva dell'operatore 'new []()'. –