003
23.05.2003, 13:00 Uhr
virtual
Sexiest Bit alive (Operator)
|
Hallo knusprige Ente Bist du Dir sicher? - Das ist der entscheidende Source von CDialog:
C++: |
CDialog::~CDialog() { if (m_hWnd != NULL) { TRACE0("Warning: calling DestroyWindow in CDialog::~CDialog --\n"); TRACE0("\tOnDestroy or PostNcDestroy in derived class will not be called.\n"); DestroyWindow(); } }
|
DestroyWindow ist ein member von der Klasse. Die Warnung Besagt nun folgendes: Wenn ich eine abgeleitete Klasse habe, wo ich DestroyWindow überschrieben habe, dann kann im Destructor nur noch CDialog:estroyWindow aufgerufen werden, nicht jedoch die Version der abgeleiteten Klasse. Wenn nun DestroyWindow in der Abgeleiteten Klasse deshalb überschrieben wurde, um dort Resourcen freizugeben, dann ist es schon eine wichtige Frage, ob diese Resourcen freigegeben werden oder nicht.
Als Lösung bieten sich zwei verfahren an: Man Schreibt in der abgeleiteten Klasse einen eigenen Destructor, der auch nur DestroyWindow aufruft. Damit ist dann sichergestellt, daß die überschriebene Version genommen wird. Oder - und das ist empfehlenswert - man achtet darauf, daß das Fenster bereits destroyed worden ist, bevor das Objekt destruiert wird -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) Dieser Post wurde am 23.05.2003 um 13:04 Uhr von virtual editiert. |