一、问题函数
本意:传入一个指针,判断指针是否为空,不为空的话就释放掉,这样在析构函数里面不用一段段重复写函数内的那段代码,封装后只用写如"FreeObj(pBtnSave);"就可以了。
BOOL FreeObj(
void
*
pObj)
{
if (pObj)
{
delete pObj;
pObj = NULL;
return TRUE;
}
return FALSE;
}
{
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);
{
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);
int b = 1 ;
a = & b;
FreeObj(a);
当前对C++涉足尚浅,有朋友能解答一下的话非常感谢!
四、摘录C++ Primer中关于”函数参数声明成引用还是指针呢?“ ,也许有所启示。
引用必须被初始化为指向一个对象,一旦初始化了,它就不能再指向其他对象。指针可以指向一系列不同的对象也可以什么都不指向。
本文转自博客园农民伯伯的博客,原文链接:MFC控件指针公用释放方法[void* | 指针的引用],如需转载请自行联系原博主。