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:
@@ -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
|
||||
|
@@ -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()
|
||||
|
@@ -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 );
|
||||
|
@@ -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.
|
||||
|
Reference in New Issue
Block a user