本人建议在OnInitDialog()函数中初始化成员变量,尽量不要在构造函数中初始化。
如:创建对话框应用程序并生成"CCalculatorDlg"类,继承于"CDialog"类。
该问题基于"CCalculatorDlg"类来进行说明:
在CCalculatorDlg类中定义了double m_data和CEdit *m_pEdit两个成员变量
1.在CCalculatorDlg()构造函数或者OnInitDialog()函数中都可以对这两个变量进行如下初始化:
m_data=0;
m_pEdit=NULL;
2.可以在OnInitDialog()函数中进行如下初始化:
m_data=0;
m_pEdit=(CEdit *)this->GetDlgItem(IDC_EDIT);//IDC_EDIT为对话框中的CEdit控件ID
3.在CCalculatorDlg()构造函数中如果进行如下初始化:
m_pEdit=(CEdit *)this->GetDlgItem(IDC_EDIT);//IDC_EDIT为对话框中的CEdit控件ID
则会在生成"Debug解决方案"时报错,而在生成"Release解决方案"时不会报错。
在生成"Debug解决方案"时所报的错:
Debug Assertion Failed!
Program:...
File:...\winocc.cpp
Line:92
打开winocc.cpp并跳至第92行
该语句断言m_hWnd是否为窗体句柄,只在生成"Debug解决方案"时执行该语句,而生成"Release解决方案"时跳过该断言宏。
至于它为什么会报错我是这样子理解的:在生成CCalculatorDlg对话框并调用CCalculatorDlg()构造函数时其基类CWnd中的m_hWnd还为来得及初始化(即m_hWnd==NULL),因此执行第92行的断言肯定会出错,因此最好把此类的初始化放在OnInitDialog()中。