Make wxDocTemplate::CreateDocument() exceptions-safe.

Don't create the document object if InitDocument() throws.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71371 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2012-05-07 12:23:09 +00:00
parent e4f762f416
commit 319ff5745e

View File

@@ -859,17 +859,19 @@ wxDocument *wxDocTemplate::CreateDocument(const wxString& path, long flags)
bool
wxDocTemplate::InitDocument(wxDocument* doc, const wxString& path, long flags)
{
wxScopeGuard g = wxMakeObjGuard(*doc, &wxDocument::DeleteAllViews);
doc->SetFilename(path);
doc->SetDocumentTemplate(this);
GetDocumentManager()->AddDocument(doc);
doc->SetCommandProcessor(doc->OnCreateCommandProcessor());
if (doc->OnCreate(path, flags))
return true;
if ( !doc->OnCreate(path, flags) )
return false;
if (GetDocumentManager()->GetDocuments().Member(doc))
doc->DeleteAllViews();
return false;
g.Dismiss(); // no need to call DeleteAllViews() anymore
return true;
}
wxView *wxDocTemplate::CreateView(wxDocument *doc, long flags)