Also bin ich an die Speicherverwaltung in C gewöhnt, wo free(pointer)
freien Speicherplatz freigibt, auf den pointer
zeigt. Jetzt verwirre ich mich, wenn ich versuche, in C++ etwas Einfaches zu tun.Löschen eines dynamisch zugewiesenen 2D-Arrays
Wenn ich in einer Art und Weise ein 2D-Array von Doppel zugewiesen haben ähnlich wie diese
double** atoms = new double*[1000];
for(int i = 0; i < 1000; i++)
atoms[i] = new double[4];
was auf dem Heap von neuen zugewiesen die richtige Methode der Freigabe des Speichers sein würde?
Meine Gedanken waren ursprünglich das (weil mein Gehirn in C dachte):
for(int i = 0; i < 1000; i++)
delete atoms[i];
delete atoms;
Aber ich hatte die Existenz des delete[]
Betreiber vergessen, so glaube ich, die richtige Methode ist wie folgt:
for(int i = 0; i < 1000; i++)
delete[] atoms[i];
delete[] atoms;
Ist es wichtig, den Unterschied zwischen den Operatoren delete
und delete[]
zu verstehen? Oder kann ich einfach davon ausgehen, dass immer, wenn ich ein Array mit ptr = new x[]
zuweisen, ich es auch mit delete[] ptr
freigeben muss?
Die Version mit 'delete []' gültig ist. Wenn Sie 'delete []' für Nicht-Array-Objekte aufrufen, handelt es sich um ein ub. Sie können in anderen SO Fragen sehen: http://stackoverflow.com/questions/4255598/delete-vs-delete – gomons
Danke, ich hatte Probleme, solche Beiträge aus irgendeinem Grund zu finden ... aber das ziemlich viel klar es. Ich markierte dies als ein Duplikat dieser Frage – Alex