我动态创建按钮时
声明到全局变量   可以成功创建按钮并显示 
public
  cbutton b;void cdialog::onini()
{
   b.create(参数省略)
}
可是我声明成局部变量就不行void cdialog::onini()
{
   cbutton b;
   b.create(参数省略)
}我也知道声明成指针对象肯定行
 cbutton * b;
 b = new cbutton ;
 b->create(参数略);这是为什么啊!!!!!!!!!!!!!!!!!!!!!! 大虾指点
还有为什么有的对象声明成局部普通对象也可以成功创建啊!!!!! 搞不懂
  cpen p;
  p.create(参数略)  CDC dcMem;
  dcMem.CreateCompatibleDC(GetDC());
  
  .....为什么像 cpen, cdc 等等子类的很多对象只要声明到某个过程都可以成功创建阿!!!!!
弄不清!!!!

解决方案 »

  1.   

    void cdialog::onini()
    {
       cbutton b;
       b.create(参数省略)
    }这个局部变量是可以创建的,只不过刚刚创建,到退出函数的时候就自动析构,拜拜了
      

  2.   

    atry说的对,如果你要的话:void cdialog::onini()
    {
       static cbutton b; // 加了static 
       b.create(参数省略)
    }
      

  3.   

    这个是不是和类的局部变量生存期有关系
    ========
    正是,决定这些玩意的正是“变量生存期”
    你可以做个试验:

    “ cbutton * b;
     b = new cbutton ;
     b->create(参数略);”
    在按钮事件中加一句:
    delete b;
    点一下窗体就没了…………为什么像 cpen, cdc 等等子类的很多对象只要声明到某个过程都可以成功创建阿!!!!!
    弄不清!!!!
    ===
    因为它们只是使用一下就好了
      

  4.   

    void cdialog::onini()
    {
       b.create(参数省略)
    }
    可是我声明成局部变量就不行
    //局部变量的生存周期只在当前函数体内
    //局部变量一般也在栈中分配
    //函数调用结束在当前函数栈销毁对象就没了