Guybrush Threepwood Geschrieben 10. März 2003 Geschrieben 10. März 2003 Hi, kann mir einer von euch den Unterschied zwischen delete und delete [] erklären? Oder gibt es gar keinen? Gruß Guybrush Zitieren
Goos Geschrieben 10. März 2003 Geschrieben 10. März 2003 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 Zitieren
Guybrush Threepwood Geschrieben 10. März 2003 Autor Geschrieben 10. März 2003 Achso, danke! Dann muß ich schnell ein paar deletes erweitern:rolleyes: Gruß Guybrush Zitieren
Klotzkopp Geschrieben 10. März 2003 Geschrieben 10. März 2003 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. Zitieren
Guybrush Threepwood Geschrieben 10. März 2003 Autor Geschrieben 10. März 2003 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? Zitieren
Goos Geschrieben 10. März 2003 Geschrieben 10. März 2003 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 Zitieren
Guybrush Threepwood Geschrieben 10. März 2003 Autor Geschrieben 10. März 2003 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. Zitieren
nic_power Geschrieben 10. März 2003 Geschrieben 10. März 2003 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 Zitieren
Guybrush Threepwood Geschrieben 11. März 2003 Autor Geschrieben 11. März 2003 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? Zitieren
SgtBadAzz Geschrieben 11. März 2003 Geschrieben 11. März 2003 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 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.