设为首页 加入收藏

TOP

MFC控件指针公用释放方法
2014-11-05 22:00:08 】 浏览:219
Tags:MFC 控件 指针 公用 释放 方法

  一、问题函数


  本意:传入一个指针,判断指针是否为空,不为空的话就释放掉,这样在析构函数里面不用一段段重复写函数内的那段代码,封装后只用写如"FreeObj(pBtnSave);"就可以了。


  BOOL FreeObj(void* pObj)


  {


  if(pObj)


  {


  delete pObj;


  pObj = NULL;


  return TRUE;


  }


  return FALSE;


  }


  现实证明这种方法是行不通的,执行此方法后pBtnSave指针仍然不为空,然后想到了指针引用,能够定义如下函数,但是使用起来很复杂(- - # 事实上不知道怎么使用):


  BOOL FreeObj(void* &pObj)


  二、折中办法


  #define FreeObj(pObj) if(pObj){delete pObj;pObj=NULL}


  只是使用的话就不能带分号了,因为这是一个宏,然后发现C++宏好强大,这样写效率也应该没什么好说的了,但是被同事提醒,宏很强大但是切忌乱用。


  三、 一个指针的引用例子


  void FreeObj(int* &pObj)


  {


  if(pObj){


  delete pObj;


  pObj = NULL;


  }


  }


  //测试代码


  int* a;


  int b = 1;


  a = new int;


  *a = b;


  FreeObj(a);


  注意,如果测试代码写成如下则调用FreeObj(a)会出错:


  int* a;


  int b = 1;


  a = &b;


  FreeObj(a);


  当前对C++涉足尚浅,有朋友能解答一下的话非常感谢!


  结束语


  感觉还没入门,等项目稍微缓点了还是系统的来恶补C++吧,通过这个例子对指针有了新的认识,目前的理解是函数传递指针只是传递了一个地址而已,也就是拷贝了指向同一个地址的指针,而传值是拷贝的一份数据,不同的是拷贝的指针能改变改地址的数据。


  编辑特别推荐:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇朝花夕拾C++篇之C++运算符 下一篇关于构造函数、赋值函数和析构函数

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目