zoukankan      html  css  js  c++  java
  • 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++吧,通过这个例子对指针有了新的认识,目前的理解是函数传递指针只是传递了一个地址而已,也就是拷贝了指向同一个地址的指针,而传值是拷贝的一份数据,不同的是拷贝的指针能改变改地址的数据。

  • 相关阅读:
    《算法竞赛入门经典》 例题35 生成元 (Digit Generator, ACM ICPC Seoul 2005,UVa)
    《算法竞赛入门经典》 例题35 生成元 (Digit Generator, ACM ICPC Seoul 2005,UVa)
    《算法竞赛入门经典》 例题35 生成元 (Digit Generator, ACM ICPC Seoul 2005,UVa)
    SVN分支
    SVN分支
    SVN 版本回退
    SVN 版本回退
    如何在excel中取消合并单元格后内容自动填充?
    如何在excel中取消合并单元格后内容自动填充?
    如何让自己像打王者荣耀一样发了疯、拼了命的学习?
  • 原文地址:https://www.cnblogs.com/over140/p/1713595.html
Copyright © 2011-2022 走看看