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
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
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
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.
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?
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
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.
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
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?
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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden