MFC控件指针公用释放方法[void* | 指针的引用]
2010-04-18 01:39
274 查看
前言
看见重复的代码就想封装,这个习惯转入C++之后也没改,即使效率有所影响也尽力去封装,比如在类的析构函数里面释放指针,一个个判断然后一个个delete然后再设置为NULL,就想着写一个公用释放指针的方法,也就有了下面的问题一。
文章
1. C++返回引用类型 指针的引用
正文
一、问题函数
本意:传入一个指针,判断指针是否为空,不为空的话就释放掉,这样在析构函数里面不用一段段重复写函数内的那段代码,封装后只用写如"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++ Primer中关于”函数参数声明成引用还是指针呢?“ ,也许有所启示。
引用必须被初始化为指向一个对象,一旦初始化了,它就不能再指向其他对象。指针可以指向一系列不同的对象也可以什么都不指向。
结束语
感觉还没入门,等项目稍微缓点了还是系统的来恶补C++吧,通过这个例子对指针有了新的认识,目前的理解是函数传递指针只是传递了一个地址而已,也就是拷贝了指向同一个地址的指针,而传值是拷贝的一份数据,不同的是拷贝的指针能改变改地址的数据。
看见重复的代码就想封装,这个习惯转入C++之后也没改,即使效率有所影响也尽力去封装,比如在类的析构函数里面释放指针,一个个判断然后一个个delete然后再设置为NULL,就想着写一个公用释放指针的方法,也就有了下面的问题一。
文章
1. C++返回引用类型 指针的引用
正文
一、问题函数
本意:传入一个指针,判断指针是否为空,不为空的话就释放掉,这样在析构函数里面不用一段段重复写函数内的那段代码,封装后只用写如"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++ Primer中关于”函数参数声明成引用还是指针呢?“ ,也许有所启示。
引用必须被初始化为指向一个对象,一旦初始化了,它就不能再指向其他对象。指针可以指向一系列不同的对象也可以什么都不指向。
结束语
感觉还没入门,等项目稍微缓点了还是系统的来恶补C++吧,通过这个例子对指针有了新的认识,目前的理解是函数传递指针只是传递了一个地址而已,也就是拷贝了指向同一个地址的指针,而传值是拷贝的一份数据,不同的是拷贝的指针能改变改地址的数据。
相关文章推荐
- MFC控件指针公用释放方法[void* | 指针的引用]
- MFC中各类指针的引用方法
- MFC各类指针的引用方法
- 《C++ Primer》学习 之 返回数组的引用(返回数组的指针,方法与之相同)
- 引用MFC指针的获取
- 两种方法实现MFC对话框最大化时控件也随比例最大化或者还原
- 在MFC框架下引用RichEdit控件
- 引用MFC指针的获取【三】
- MFC中获取MainFrame,Doc,View,App等指针的方法
- vs2010 visual leak detector 配置方法 和 静态指针的释放
- MFC 获取picture控件的鼠标点击坐标位置的方法
- 在VS2010里MFC对话框中使用OpenGL绘图,添加的控件不显示的一种解决方法
- MFC中SDI结构下如何获取Ribbon上的控件指针
- MFC中获取各种类(文档、视图、框架、应用程序)指针的方法
- VC MFC 常用控件使用方法-- CTreeCtrl
- 指针的引用与正常指针 释放内存的另一例比较
- MFC中动态创建列表控件及其刷新重绘的方法
- MFC中进度条控件的使用方法
- MFC中获取App,MainFrame,Doc和View类等指针的方法
- MFC 获得各类指针、句柄的方法