002
28.03.2006, 18:40 Uhr
ao
(Operator)
|
Zitat von (un)wissender: |
Hallo, wie findet ihr Speicherlöcher
|
sch***e
Im Ernst: Das wichtigste ist, sie gar nicht erst entstehen zu lassen. Dazu muss man den Überblick behalten:
* Wann immer es geht, fertige und vertrauenswürdige Smartpointer, Containerklassen etc. verwenden. * Für die Fälle, wo das nicht geht: Speicherverwaltung vom restlichen Code trennen, damit ein testbares und debugbares Heap-Modul entsteht. Da kann man dann auch Debug-Ausgaben, Logfile-Ausgaben oder Ähnliches einbauen, mit denen man Fehlern leichter auf die Spur kommt, natürlich nur, wenn das Heap-Modul konsequent verwendet wird. * Daher zum Anfordern und Freigeben von Speicher aus der Applikation heraus nur dieses Heap-Modul verwenden, keine eingestreuten new- oder delete-Statements schreiben.
Das gilt zumindest dann, wenn Objekte erzeugt werden, die länger leben als ein paar Codezeilen. Objekte mit lokaler Lebensdauer sollten möglichst als Stack-Objekte erzeugt werden.
Wenn das nicht möglich ist (z.B. Anzahl erst zur Laufzeit bekannt) und wenn man sich sicher ist, den Code zu überblicken (wenige Zeilen nur!) und wenn auch sonst nichts dagegen spricht, kann man eine Ausnahme machen und Objekte direkt mit new holen und mit delete wieder loslassen. Aber das muss die Ausnahme bleiben und darf nicht aus Bequemlichkeit immer wieder gemacht werden.
ao |