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

  • 相关阅读:
    话说打工
    Linux系统信息查看命令大全
    基于LNMP的Zabbbix之Zabbix Server源码详细安装,但不给图
    基于LNMP的Zabbbix之PHP源码安装
    php --with-mysql=mysqlnd
    LeetCode:Binary Tree Level Order Traversal
    tslib-触摸屏校准
    A
    【雷电】源代码分析(二)-- 进入游戏攻击
    能够替代浮动的inline-block
  • 原文地址:https://www.cnblogs.com/over140/p/1713595.html
Copyright © 2011-2022 走看看