delete, eckige vs. runde Klammern
-
Grüße,
mal eine allgemeine Frage:
Worin besteht der Unterschied zwischen delete() und delete[]?Ich würde einfache Daten mit delete() und Felder mit delete[] löschen, oder?
zB:
int *iData = new int; char *cName = new char[5]; delete(iData); delete[] cName;Und zwar mit dem Erfolg, dass das ganze Array gelöscht wird. Oder sehe ich das falsch?
Grüße
-
Eigentlich heißt es bei einfachen Typen (also ohne Array) nur
delete iData;- also ohne Klammern.
-
Das siehst du richtig.
Auf new muss delete folgen*
Auf new[] muss delete[] folgen
Auf UN muss Hohn folgen.Wenn möglich solltest du übrigens
int i; char name[5];schreiben.
*: idR.
-
Das siehst du richtig. Die Klammern im ersten Fall sind unnötig.
Semi-Offtopic:
1. Ungarische Notation kommt in C++ nicht so gut, weil es zu viele, zu komplexe Datentypen gibt. Außerdem solltest du ohnehin möglichst typunabhängig programmieren, das steigert die Wiederverwertbarkeit von Code beträchtlich. Gib deinen variablen einfach aussagekräftige Namen.
2. new und delete wirst du in C++ fast nie benutzen, ganz besonders nicht für Arrays, es sei denn du schreibst das Backend eines Allokators oder ähnliches. Eventuell hier und dort noch ein new für manche Polymorphismusprobleme. Das ist dir schon bewusst, oder?edit: Zu langsam
-
Danke für eure schnelle Antworten.
grüße