SAFE_RELEASE funktioniert nicht
-
Ich habe mal aus Spass probiert ob dieses Makro funktioniert. Und habe versucht einen NULL-Zeiger (tolles Wort) mit SAFE_RELEASE zu löschen.
Und mein Programm ist abgestürzt. Der Debuger zeigt genau auf diese Stellen im Code
Ist das Makro fehlerhaft?
SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }
-
Hi,
dann war der Zeiger wahrscheinlich nicht 0...
Das Makro stimmt und sollte gehen!ChrisM
PS: Bitte nach C++-Forum verschieben!
-
Das hat nichts mit Standard-C++ zu tun!
Was Du suchst ist
SAFE_DELETE(o) { if(o) { delete (o); (o)=NULL; } }
!!
Aber Du hast
SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }
benutzt.
Und das ist für COM-Interfaces, die eine "Release"-Methode haben. Haben normale Objekte aber nicht.
-
Dann gäbe es aber einen Kompilierfehler, wenn man es auf einen normalen Zeiger anwenden würde, der keine "Release"-Methode hat!
-
MAKROS sind doch nicht typsicher?!?
-
lol
-
Sgt. Nukem schrieb:
MAKROS sind doch nicht typsicher?!?
Aber wenn Du z.B. folgendes machen würdest:
char* test; SAFE_RELEASE(test);
Dann würde der Compiler Dir einen Fehler melden, weil char* doch keine "Release"-Methode hat.
-
TomasRiker schrieb:
Sgt. Nukem schrieb:
MAKROS sind doch nicht typsicher?!?
Aber wenn Du z.B. folgendes machen würdest:
char* test; SAFE_RELEASE(test);
Dann würde der Compiler Dir einen Fehler melden, weil char* doch keine "Release"-Methode hat.
*rüüÜüüÜüüülps* - Stümmt! *batz*
-
Und wenn ich sowas habe:
typedef char* pc; pc a[10]; for(int i = 0; i < 10; i++) a[i] = new char; pc* b = a; for(int i = 0; i < 10; i++) SAFE_DELETE(*b++);
Seltsam, dass das nicht klappt, gell?
Ob das daran liegt, dass der Programmierer von SAFE_DELETE keine inline-Funktionen kannte?