Possiedo un costruttore che assegna diversi blocchi di memoria utilizzando l'operatore new
.Eccezione allocazione memoria in Constructor
X::X() {
a = new int[100];
b = new char[100];
c = new float[100];
}
La mia domanda è, se l'assegnazione di c
non riesce e il costruttore genera un'eccezione, sarà la memoria per a
e b
essere liberato automaticamente?
No. Questo è ciò che è utile per la tecnica nota come [RAII] (https://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization). Se vuoi una classe per la gestione di un array dinamico, è chiamata ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector). Non provare a scriverne uno da solo. – BoBTFish
Lettura richiesta: [Perché i programmatori C++ dovrebbero ridurre al minimo l'uso di "nuovo"?] (Http://stackoverflow.com/questions/6500313/why-should-c-programmers-minimize-use-of-new) –
Oltre all'utilizzo di 'std :: vector', se la dimensione è una costante fissa in fase di compilazione e la memoria non deve essere allocata dall'heap, si consideri l'uso di [' std :: array'] (http: // it .cppreference.com/w/cpp/container/array). –