CFont::DeleteObject Implementierung?
-
Hi Leute,
mich würde mal interessieren wie die Implementierung dieser Methode aussieht.
In meiner Anwendung habe ich mehrere Klassen die miteinander kommunizieren. Gelegentlich muss eines der Objekte zerstört werden. Allgemein macht man das ja mit "delete object". Die CFont::DeleteObject-Methode hat mich begeistert
würde gerne auch solche Methoden für meine Objekte implementieren. Wie gehe ich dabei vor? Kann mir nicht vorstellen wie ich innerhalb eines Objektes(Klasse) dieses Objekt löschen kann. Gibt es nicht -ohne jetzt lang im Verzeichnisbaum nach dieser Datei zu suchen- eine Möglichkeit sich den SourceCode der CFont::DeleteObject-Methode anzuschauen? Über rechte Mousetaste kann ich zwar "gehe zu Definition" oder "gehe zu Deklaration" gelangen, aber deren Implmentierung bleibt mir verborgen!?Grüße
ToH
-
Hast du schon mal einen Breakpoint da drauf gesetzt und dann "In Aufruf springen" bzw F11 ausprobiert ?
-
class foo { public: void KillMe() { deleteObject(this); } static void deleteObject(foo *obj) { delete obj; } }; int main() { foo *a = new foo(); a->KillMe(); return 0; }Ob das gegen irgend einen Standard verstösst und nur auf jedem 2. Compiler geht weis ich aber gerade nicht :p
enjoy!
/me
-
-
Weil das IIRC definitiv gegen den Standard ist.
-
das_brot schrieb:
Weil das IIRC definitiv gegen den Standard ist.
Nein das ist erlaubt.
-
Wie ist das dann mit:
int main() { foo a; a.KillMe(); }
-
Das verstösst definitiv gegen den Standard. Da fehlt return 0;

Im Ernst: Ich weis nicht ob das geht, kann nicht mal jemand nachschauen wie das gemacht ist?
-
CFont ist von CGdiObject abgeleitet und übernimmt DeleteObject.
HGDIOBJ CGdiObject::Detach() { HGDIOBJ hObject = m_hObject; if (hObject != NULL) { CHandleMap* pMap = afxMapHGDIOBJ(); // don't create if not exist if (pMap != NULL) pMap->RemoveHandle(m_hObject); } m_hObject = NULL; return hObject; } BOOL CGdiObject::DeleteObject() { if (m_hObject == NULL) return FALSE; return ::DeleteObject(Detach()); }und dann ::DeleteObject
WINGDIAPI BOOL WINAPI DeleteObject( IN HGDIOBJ);Tjo und weiter komm ich nicht. Wie kann man denn die WINAPI anschauen gehen? ^^
Grüssli
-
falsch! schrieb:
das_brot schrieb:
Weil das IIRC definitiv gegen den Standard ist.
Nein das ist erlaubt.
Und wird sogar sehr häufig eingesetzt (z.B. bei "Zählenden Objekten" wie COM-(Wrapper)-Objekte...