?
Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
//Code
delete pBitmap;
pBitmap = NULL;
/Irgendwelche Arbeiten durch den User,
irgendwann erneuter Functionsaufruf./
Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
//Code
delete pBitmap;
pBitmap = NULL;
Die doppelte Löschung kann ich nur vermeiden, indem ich alle Kontexte erst beim beenden der App delete.
Die unvermeidliche Konsequenz: Was immer der user aufruft, es wird permanent über die Leufzeit hinweg im Speicher gehalten. Doch mit Speicher gilt es sparsam umzugehen. Egal wie groß er ist, er ist begrenzt. Irgendwann ist also ein Notfall zu erwarten, der nur durch eine Zwangsmaßnahme behoben werden kann.
Will nicht "olle Petze" :p sein, aber "MusicMatch" zeigt sich hier als solcher Fall (wenngleich sicher auf einem anderen Hintergrund). Die abgespielten Songs werden weiterhin im Speicher gehalten. Ich muß die üblen Nachteile hinnehmen, die App irgendwann beenden oder zB. via FreeMeX immer wieder Speicher freigeben. - oder auf eine andere Anwendung zugreifen, was ich auch gemacht hab.
Bei Spielen wird die Sache geradezu fatal. Schon nach ganz kurzer Spielzeit wird die Performance total in den Keller gehen, das gesamte System setzt sich sehr schnell fest.
Also muß man zur Laufzeit Speicher freigeben. Der Programmierer muß absehen, wann das zu geschehen hat. Und nach meinen Infos ist hierfür vorgesorgt. Es ist legitim, einen deleteten Kontext auf NULL zu setzen. Einen NULL-Zeiger darf man löschen, ohne eine exeption auszulösen.
Stimmt diese Aussage oder ist sie falsch? Ich will es nicht behaupten sondern es als bekanntes Argument einbringen.