2010.6.18

一、动态生成菜单

     CMenu menu;

     menu.CreatePopupMenu();

     menu.AppendMenu(MF_SEPARATOR,33001,_T(""));
     menu.AppendMenu(MF_STRING,ID_POPMENU_Rename,_T("重命名"));
     menu.AppendMenu(MF_STRING,ID_POPMENU_Delete,_T("删除"));

    如果使用一个menu,重复生成菜单,那么使用之后,需要menu.detach();

 

二、C++类名构建对象和new创建对象的区别

    要理解对象内存分配,栈内存分配和堆内存分配的区别。

  1、

    用类名定义对象的时候,当该对象的生命周期到了以后,会自动析构,例如在函数中定义了一个对象,当函数执行完毕以后,该对象自动析构,

    如果是new定义的,在函数执行完毕以后,该对象不会自动析构,只能程序员来销毁(delete)。如果你保留下了该对系那个的指针,在其它地方依然能够使用该对象

  2、不管以何种方式创建,都调用构造函数。

      比如如下类:

    class CPersion
{
public:
 CPersion(void);
public:
 ~CPersion(void);
public:
 int i;
};

   在下面的main中定义

 

int _tmain(int argc, _TCHAR* argv[])
{
 CPersion persion;   //第一种声明方法:在栈中声明。首先调用构造函数。当main退出时,调用析构函数。
 persion.i=2;

 

 CPersion* per2=new CPersion();  //第二种声明方法:在堆上声明。首先调用构造函数。当main退出时,没有调用构造函数,必须手动释放内存。
 per2->i=3;                                //所以这段儿代码存在内存泄漏


 return 0;
}

 

posted @ 2010-06-18 17:55  pjh123  阅读(147)  评论(0编辑  收藏  举报