积极答复者
MFC 控件实例的创建是在栈上还是在堆上

问题
-
各位大哥下午好!
俺是C++的菜鸟,更是MFC的菜鸟,但俺就是喜欢这门难学S了的语言。俺发现在MFC编程时,包括CApp,CWnd实例在内,向导生成的控件,及控件变量都不是指针,于是俺想莫非这么多的控件(类)实例全在栈上分配?(俺知道象wxWidget库可都是在堆上创建控件实例的。)可是俺又发现,比如在如下代码中:
void CLineOneDlg :: OnSize(UINT nType, int cx, int cy)
{
CDialog :: OnSize(nType, cx, cy);
// TODO: Add your message handler code here
this->Invalidate();
}为什么又用到this 指针?这么说来又是在堆上创建的窗口实例了?俺在这个问题上犯迷胡了,请指点,多谢。
答案
全部回复
-
Vonger 写: 呵呵,看你们说的挺有意思的.
简单的来说局部变量都是创建在栈上,全局变量都是在堆上.
基本所有的控件都是在堆上(也就是内存上)创建的,栈只是个寄存器,临时变量存放的地方,控件不可能在它上面创建.
Window的栈是用来函数调用的,也就1M左右吧.
希望对你有帮助
谢谢两位热心为俺这种菜鸟级C++迷指点迷津。
基本所有的控件都是在堆上(也就是内存上)创建的,栈只是个寄存器,临时变量存放的地方,控件不可能在它上面创建.
俺就是对这点很迷惑,因为俺看到Wizard 生成的控件变量(即通过Wizard 借DDX 生成的与资源关联的控件变量,如:CButton btnOK)都不是指针所以就以为是在栈上创建的,难道理解错了吗?