Calling a virtual function from a destructor is not good:

rearranged code to avoid it.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19826 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Mattia Barbon
2003-03-26 22:22:55 +00:00
parent d8d1818419
commit 2187eef5bb
4 changed files with 17 additions and 6 deletions

View File

@@ -60,6 +60,8 @@ public:
protected:
// common part of all constructors
void Init();
// common part of wxDialog/wxFrame destructors
void PreDestroy();
private:
// both these functions should be pure virtual

View File

@@ -208,6 +208,7 @@ void wxDialog::SetModal(bool flag)
wxDialog::~wxDialog()
{
m_isBeingDeleted = TRUE;
delete m_eventLoop;
if (m_mainWidget)
@@ -221,6 +222,9 @@ wxDialog::~wxDialog()
{
XtUnmapWidget((Widget) m_mainWidget);
}
PreDestroy();
DoDestroy();
}
void wxDialog::DoDestroy()

View File

@@ -310,12 +310,16 @@ wxFrame::~wxFrame()
delete m_frameStatusBar;
m_frameStatusBar = NULL;
}
PreDestroy();
DoDestroy();
}
void wxFrame::DoDestroy()
{
Widget frameShell = (Widget)GetShellWidget();
if( frameShell )
XtRemoveEventHandler( frameShell, StructureNotifyMask,
False, (XtEventHandler)wxFrameMapProc,
(XtPointer)this );

View File

@@ -64,7 +64,7 @@ static void wxTLWEventHandler( Widget wid,
// wxTopLevelWindowMotif implementation
// ===========================================================================
wxTopLevelWindowMotif::~wxTopLevelWindowMotif()
void wxTopLevelWindowMotif::PreDestroy()
{
wxTopLevelWindows.DeleteObject(this);
@@ -85,9 +85,10 @@ wxTopLevelWindowMotif::~wxTopLevelWindowMotif()
wxTLWEventHandler,
(XtPointer)this );
}
}
DoDestroy();
wxTopLevelWindowMotif::~wxTopLevelWindowMotif()
{
SetMainWidget( (WXWidget)0 );
// If this is the last top-level window, exit.