关于对话框应用程序中的变量应在何处进行初始化的问题

本人建议在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()中。

你可能感兴趣的:(应用程序)