为什莫动态创建控件只能使用指针形式?例如:
{
    CButton* ssButton;
    ssButton = new CButton;
    ssButton->Create("Button Title", WS_CHILD | WS_VISIBLE
,CRect(20, 20, 100, 240), this,IDC_MyButton);
}但是下面的使用对象的方法就不能成功创建了:
{
    CButton ssButton;
    ssButton.Create("Button Title", WS_CHILD | WS_VISIBLE
,CRect(20, 20, 100, 240), this,IDC_MyButton);
}
我认为应该是差不多啊,这到底是为什莫???

解决方案 »

  1.   


    {
        CButton* ssButton;
        ssButton = new CButton;
        ssButton->Create("Button Title", WS_CHILD | WS_VISIBLE
    ,CRect(20, 20, 100, 240), this,IDC_MyButton);
    }
    CButton 对象是在堆上建立的,全局有效{
        CButton ssButton;
        ssButton.Create("Button Title", WS_CHILD | WS_VISIBLE
    ,CRect(20, 20, 100, 240), this,IDC_MyButton);
    }
    CButton 对象是在栈上建立的,函数栈内有效,函数结束他的生命期也就完了
      

  2.   

    对了,如果我把CButton的对象实例放到public或者private部分去,倒是可以实现,那样子的话算是堆中还是栈中?
      

  3.   

    在程序结束前,new的变量如果没有delete,一直是有效的。而在栈上建立的变量,超出作用范围就自动销毁了。
      

  4.   

    我想请问,如果我把CButton的对象实例放到public或者private部分去,倒是可以实现,那样子的话算是堆中还是栈中?
      

  5.   

    “我想请问,如果我把CButton的对象实例放到public或者private部分去,倒是可以实现,那样子的话算是堆中还是栈中?”这样,CButton对象和你的Dialog同时诞生,同时死亡,当然可以创建成功。弄明白堆和栈的区别吧。