DirectDraw deinitialisieren
-
Hallo!
Ich verwende DirectDraw mit C++.
Wie deinitilisiert man DD beim Beenden ordnungsgemäß?Normalerweise gilt ja die Regel, dass man nur Objekte löschen muss, die man mit new angelegt hat. Da man DirectDraw mit der Funktion DirectDrawCreate() anlegt (und die Surfaces mit CreateSurface()) trifft das ja eigentlich nicht zu, weshalb man eigentlich kein DD-Objekt mit delete löschen müsste.
Doch jetzt hat mir ein Bekannter gesagt, dass man bei COM-Objekten immer zuerst ->Release() aufrufen muss, und danach das Objekt mit delete löschen muss.
Genau das habe ich jetzt probiert, geht aber nicht:DD->Release();
delete DD;Ich bekomme die Fehlermeldung "Expression: _BLACK_TYPE_IS_VALID(pHead->nBlockUse)". Release geht, aber die Zeile mit delete geht nicht mehr.
Als mir im Forum jemand gesagt hat, dass man nur mit new erstellte Objekte manuell löschen muss hab' ich einfach das delete weggelassen, aber nachdem mir jemand gesagt hat dass das bei COM-Objekten anders ist fürchte ich mich wieder vor Speicherlecks.
Wie geht das jetzt wirklich?
Danke!
mfg
-
if(lpDD != NULL) // Exsitiert das DirectDraw Object? { if(lpDDSPrimary != NULL) // Wenn ja wird die Primärsuface freigegeben { lpDDSPrimary->Release(); lpDDSPrimary = NULL; lpDDSBack = NULL; // Der Backbuffer hängt an der Primärsurfce, weshalb wir es nur auf NULL setzen. } lpDD->Release(); // Jetzt können wir das DD Object freigeben lpDD = NULL; } // DirectDraw wurde beendet.
-
Hi,
sag deinem Bekannten, dass er keine Ahnung hat. Release() aufrufen reicht vollkommen aus, mehr muss man nicht machen.
Und am besten gibt man die Objekte in der umgekehrten Reihenfolge des Erstellens frei, so mache ich das immer, denn so kriegt man keine Fehler, wenn eine Objekt gelöscht wurde, obwohl noch abhängige Objekte existieren.
ChrisM