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

简介:

正文

  一、问题函数

    本意:传入一个指针,判断指针是否为空,不为空的话就释放掉,这样在析构函数里面不用一段段重复写函数内的那段代码,封装后只用写如"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++吧,通过这个例子对指针有了新的认识,目前的理解是函数传递指针只是传递了一个地址而已,也就是拷贝了指向同一个地址的指针,而传值是拷贝的一份数据,不同的是拷贝的指针能改变改地址的数据。



本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/583034,如需转载请自行联系原作者

相关文章
|
1月前
|
存储 Java C++
C++ 引用和指针:内存地址、创建方法及应用解析
C++中的引用是现有变量的别名,创建时需用`&`运算符,如`string &meal = food;`。指针存储变量的内存地址,使用`*`创建,如`string* ptr = &food;`。引用必须初始化且不可为空,而指针可初始化为空。引用在函数参数传递和提高效率时有用,指针适用于动态内存分配和复杂数据结构操作。选择使用取决于具体需求。
41 9
|
2月前
|
存储 安全 C++
CPP的指针和引用
CPP的指针和引用
16 0
|
6月前
|
存储 Cloud Native Linux
C++指针和引用的作用以及区别
C++指针和引用的作用以及区别
|
4月前
|
存储 Java 编译器
C 语言指针完全指南:创建、解除引用、指针与数组关系解析
创建指针 我们可以使用引用运算符 & 获取变量的内存地址:
90 0
|
10月前
CPP2022-12-指针与引用(一)(下)
CPP2022-12-指针与引用(一)
28 0
|
9月前
|
编译器 C++ 容器
C++中的类、结构体、指针和引用
在介绍类和对象之前,我们先来简单了解一下面向过程和面向对象的概念。 面向过程是指程序的设计者关注于问题的解决过程,通过将问题分解为多个步骤和函数,并将这些步骤按照顺序组合起来实现程序的功能。这种方法的优点是结构清晰、容易理解和调试。但是随着程序的规模增大,面向过程的程序会变得越来越复杂,难以维护和扩展。 而面向对象则是一种更高级别的程序设计方式,它强调将数据和对数据的操作封装起来,形成一个对象。对象既包含数据又包含操作数据的方法,可以直接对外提供服务。这种方法具有高度的灵活性、可重用性和扩展性,易于维护和修改。
155 0
|
9月前
|
编译器 C++
C++使用new来初始化指向类的指针
C++使用new来初始化类的指针 1.ClassName * p = new ClassName; 调用默认构造函数。 如果类里没有写默认构造函数,会使用编译器帮我们生成的,但不会初始化成员变量,如 class NoConstructor    //没写构造函数的类 { public:     ~NoConstructor() {}     void printVal()      {          cout << m_val << endl;      } private:     int m_val; }; NoConstructor* p1 = new NoConstruct
56 0
|
10月前
|
存储 程序员 C++
指针和引用的区别
指针和引用都是C++程序员经常使用的东西,但是他们有什么区别呢?本期我们共同探讨。
|
10月前
CPP2022-12-指针与引用(一)(上)
CPP2022-12-指针与引用(一)
33 0
|
安全 C# C++
C#调用带结构体指针的C Dll的方法
原文:C#调用带结构体指针的C Dll的方法 在C#中调用C(C++)类的DLL的时候,有时候C的接口函数包含很多参数,而且有的时候这些参数有可能是个结构体,而且有可能是结构体指针,那么在C#到底该如何安全的调用这样的DLL接口函数呢?本文将详细介绍如何调用各种参数的方法。
3425 0