掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
デストラクタの異変? (ID:64826)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
初歩的な質問で申し訳ないですが、「猫さん」のページでMFCをみていてデストラクタがどうも異変があるようなんですが、下記のようなプログラムの場合はデストラクタでデストラクタを呼ばないほうがいいんでしょうか。 どこのサイトではデストラクタでは仮想関数は呼ぶとダメって書いてあった気がするんですが。 #include <afxwin.h> class CMyWindow : public CFrameWnd{ CStatic *pMyStatic1; CStatic *pMyStatic2; public: CMyWindow(); //コンストラクタ virtual ~CMyWindow();//デストラクタ afx_msg void OnPaint(); afx_msg void OnLButtonDown(UINT, CPoint); afx_msg void OnRButtonDown(UINT, CPoint); DECLARE_MESSAGE_MAP() }; BEGIN_MESSAGE_MAP(CMyWindow, CFrameWnd) ON_WM_PAINT() ON_WM_LBUTTONDOWN() ON_WM_RBUTTONDOWN() END_MESSAGE_MAP() CMyWindow::CMyWindow() { Create(NULL, "猫でもわかるテキスト表示"); pMyStatic1 = new CStatic(); pMyStatic1->Create("", WS_CHILD | WS_VISIBLE, CRect(20, 20, 40, 40), this); pMyStatic2 = new CStatic(); pMyStatic2->Create("", WS_CHILD | WS_VISIBLE, CRect(20, 40, 40, 60), this); } CMyWindow::~CMyWindow() { delete pMyStatic1; delete pMyStatic2; //CFrameWnd::~CFrameWnd(); <--- ここのコメントをはずすと実行終了時にエラーになりコメントつけるとエラーにならなくなります。 } void CMyWindow::OnPaint() { CPaintDC dc(this); CString str1 = "回 左クリックされました"; CString str2 = "回 右クリックされました"; dc.TextOut(40, 20, str1); dc.TextOut(40, 40, str2); } void CMyWindow::OnLButtonDown(UINT nFlags, CPoint pt) { static int n = 1; char *szNum = "%d"; char str[8]; wsprintf(str, szNum, n++); pMyStatic1->SetWindowText(str); } void CMyWindow::OnRButtonDown(UINT nFlags, CPoint pt) { static int n = 1; char *szNum = "%d"; char str[8]; ::wsprintf(str, szNum, n++); pMyStatic2->SetWindowText(str); } class CMyApp : public CWinApp{ public: virtual BOOL InitInstance(); }; BOOL CMyApp::InitInstance(){ m_pMainWnd = new CMyWindow(); m_pMainWnd->ShowWindow(m_nCmdShow); m_pMainWnd->UpdateWindow(); return TRUE; } CMyApp MyApp;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.