+ // delete any our top level children which are still pending for deletion
+ // immediately: this could happen if a child (e.g. a temporary dialog
+ // created with this window as parent) was Destroy()'d) while this window
+ // was deleted directly (with delete, or maybe just because it was created
+ // on the stack) immediately afterwards and before the child TLW was really
+ // destroyed -- not destroying it now would leave it alive with a dangling
+ // parent pointer and result in a crash later
+ for ( wxObjectList::iterator i = wxPendingDelete.begin();
+ i != wxPendingDelete.end();
+ )
+ {
+ wxWindow * const win = wxDynamicCast(*i, wxWindow);
+ if ( win && win->GetParent() == this )
+ {
+ wxPendingDelete.erase(i);
+
+ delete win;
+
+ // deleting it invalidated the list (and not only one node because
+ // it could have resulted in deletion of other objects to)
+ i = wxPendingDelete.begin();
+ }
+ else
+ {
+ ++i;
+ }
+ }
+