Veröffentlicht 10. März 200322 j Hi, kann mir einer von euch den Unterschied zwischen delete und delete [] erklären? Oder gibt es gar keinen? Gruß Guybrush
10. März 200322 j Hi Guybrush, das delete [] ist im Gegensatz zu delete fuer Zeiger da, die du auch durch einem new [] Aufruf erhalten hast. z.B. N *p = new N[5]; delete[] p; N *p = new N; delete p; Goos
10. März 200322 j Autor Achso, danke! Dann muß ich schnell ein paar deletes erweitern:rolleyes: Gruß Guybrush
10. März 200322 j Der Unterschied in der Wirkung ist übrigens der, dass delete ohne eckige Klammern zwar den gesamten Speicher freigibt, aber nur den Destruktor des ersten Elements aufruft.
10. März 200322 j Autor Originally posted by Klotzkopp Der Unterschied in der Wirkung ist übrigens der, dass delete ohne eckige Klammern zwar den gesamten Speicher freigibt, aber nur den Destruktor des ersten Elements aufruft. Das heißt also, dass es bei einem string egal ist, oder?
10. März 200322 j Nuja laut Standard musst du alles was du mit new[] allokiert hast auch mit delete[] freigeben, ansonsten ist das Verhalten undefiniert Was dann aber auch heisst, es kann gut sein, dass es doch funktioniert. Es wuerde also wohl bei nem String funktionieren, aber egal ists auch wieder nicht, denn sogesehen kannst du die deletes ja auch ganz weglassen....funktioniert doch auch Goos
10. März 200322 j Autor Erst mal:D Aber bei einem String geht es doch "nur" darum den Speicher wieder freizugeben. Der hat ja keine Destruktoren die evtl. aufgerufen werden müssen.
10. März 200322 j Originally posted by Guybrush Threepwood Erst mal:D Aber bei einem String geht es doch "nur" darum den Speicher wieder freizugeben. Der hat ja keine Destruktoren die evtl. aufgerufen werden müssen. Das Freigeben des Speichers wird üblicherweise über den Destruktor implementiert. Nic
11. März 200322 j Autor Originally posted by nic_power Das Freigeben des Speichers wird üblicherweise über den Destruktor implementiert. Nic Da war ich wieder etwas undeutlich, ich meinte einen C-String. Der hat ja keinen Destruktor, weil es sich ja um kein Objekt handelt und deshlab müßte es doch egal sein, oder?
11. März 200322 j Originally posted by Guybrush Threepwood Da war ich wieder etwas undeutlich, ich meinte einen C-String. Der hat ja keinen Destruktor, weil es sich ja um kein Objekt handelt und deshlab müßte es doch egal sein, oder? Die Grundregel lautet, wie bereits erwähnt, wenn new [] dann delete [] . period. Frank
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.