MFC控件指针公用释放方法[void* | 指针的引用]

简介:

前言

  看见重复的代码就想封装,这个习惯转入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 ;
    
* =  b;
    FreeObj(a);
复制代码

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

     int *    a; 
    
int  b  =   1 ;
    a 
=   & b;
    FreeObj(a);

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

 

  四、摘录C++ Primer中关于”函数参数声明成引用还是指针呢?“ ,也许有所启示。

    引用必须被初始化为指向一个对象,一旦初始化了,它就不能再指向其他对象。指针可以指向一系列不同的对象也可以什么都不指向。

 

 

结束语

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


转载:http://www.cnblogs.com/over140/archive/2010/04/18/1713595.html

目录
相关文章
|
5月前
|
存储 安全 C++
C++中的引用和指针:区别与应用
引用和指针在C++中都有其独特的优势和应用场景。引用更适合简洁、安全的代码,而指针提供了更大的灵活性和动态内存管理的能力。在实际编程中,根据需求选择适当的类型,能够编写出高效、可维护的代码。理解并正确使用这两种类型,是掌握C++编程的关键一步。
74 1
|
4月前
|
存储 安全 C++
浅析C++的指针与引用
虽然指针和引用在C++中都用于间接数据访问,但它们各自拥有独特的特性和应用场景。选择使用指针还是引用,主要取决于程序的具体需求,如是否需要动态内存管理,是否希望变量可以重新指向其他对象等。理解这二者的区别,将有助于开发高效、安全的C++程序。
32 3
java.lang.NullPointerExceptionMybatisPlus出现,测试,java.lang.NullPointe,空指针异常,public方法少写了一个字段,没加注解
java.lang.NullPointerExceptionMybatisPlus出现,测试,java.lang.NullPointe,空指针异常,public方法少写了一个字段,没加注解
|
5月前
|
存储 安全 编译器
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
66 5
|
5月前
|
存储 安全 编译器
C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字
C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字
42 2
|
5月前
|
C++ 存储 Java
C++ 引用和指针:内存地址、创建方法及应用解析
'markdown'C++ 中的引用是现有变量的别名,用 `&` 创建。例如:`string &meal = food;`。指针通过 `&` 获取变量内存地址,用 `*` 创建。指针变量存储地址,如 `string *ptr = &food;`。引用不可为空且不可变,指针可为空且可变,适用于动态内存和复杂数据结构。两者在函数参数传递和效率提升方面各有优势。 ```
|
6月前
|
C语言
在引用数组元素时指针的运算
在引用数组元素时指针的运算
50 0
|
6月前
|
C语言
通过指针引用数组元素
通过指针引用数组元素
43 0
|
6月前
|
C语言
通过指针引用多维数组
通过指针引用多维数组
23 0