CreateNewDocument()で作成したCDocumentを破棄するには?

解決


nagareha  2009-09-18 03:34:27  No: 70952

VC2008 MFC MDIベースのソフトを作成しています。

下記???の箇所でdocの後処理をしなければいけないと思うのですが
後処理の方法を教えて下さい。
それとも何もしなくてよいのでしょうか?

CDocument* doc = m_docTemplate->CreateNewDocument();
if (doc->Read() == FALSE)
{
    ???;
    return;
}
CFrameWnd* pFrame = m_docTemplate->CreateNewFrame(doc, NULL);
m_docTemplate->InitialUpdateFrame(pFrame, doc);

何もせずにreturnした場合とdelete doc;してreturnした場合、
どちらもリークは発生せず、表面上、特に不具合はありませんでしたが
気持ち悪くって。

よろしくお願いします。


ryo  2009-09-18 21:46:36  No: 70953

CDocument::OnCloseDocumentはどうでしょう?

ドキュメントクラスは、CDocTemplateにて登録・管理されている
アプリケーション終了時にはこいつが全部消してくれますから
終了時にはリークになることはありません。

また、CDocument::~CDocument()内で登録で、自身の登録を削除していますから
delete doc;すれば、管理からも解除されて消えます

ただ、ドキュメントに関連づけてあるViewを消してるのはOnCloseDocument内のようです


nagareha  2009-09-25 23:10:32  No: 70954

ryoさん

返信が遅くなり大変申し訳ありません。

ご回答ありがとうございました。
何だかすっきりしました!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加