Quindi sono abituato alla gestione della memoria in C, dove free(pointer)
libererà tutto lo spazio indicato da pointer
. Ora mi sto confondendo quando cerco di fare qualcosa di semplice in C++.Eliminazione di un array 2D assegnato dinamicamente
Se ho un array 2D dei doppi assegnati in modo simile a questo
double** atoms = new double*[1000];
for(int i = 0; i < 1000; i++)
atoms[i] = new double[4];
quale sarebbe il metodo corretto di liberare la memoria sul mucchio allocata da new?
I miei pensieri erano in origine questo (perché il mio cervello pensava in C):
for(int i = 0; i < 1000; i++)
delete atoms[i];
delete atoms;
Ma avevo dimenticato l'esistenza dell'operatore delete[]
quindi credo che il metodo corretto è il seguente:
for(int i = 0; i < 1000; i++)
delete[] atoms[i];
delete[] atoms;
È importante comprendere la differenza tra gli operatori delete
e delete[]
? O posso solo supporre che ogni volta che alloco un array con ptr = new x[]
devo anche deallocarlo con delete[] ptr
?
La versione con 'delete []' è valido. Se chiamate 'delete []' per un oggetto non array, è un ub. Puoi vedere in altre domande su SO: http://stackoverflow.com/questions/4255598/delete-vs-delete – gomons
Grazie, ho avuto problemi a trovare messaggi del genere per qualche motivo ... ma questo praticamente lo risolve. Ho contrassegnato questo come duplicato di quella domanda – Alex