当前位置: 首页 > news >正文

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,如需转载请自行联系原作者

相关文章:

  • eclipse设置代码提示
  • CCNA-思科认证网络支持工程师及薪金调查
  • 云计算大数据峰会小记
  • ovirt官方安装文档 附录C
  • 开始我的Struts学习
  • MSDE2000与SQLExpress2005共存时如何远程访问
  • 庖丁解Puppet之中级进阶篇
  • Web服务初探:用Demo学Web服务系列(2)——编写一简单的Web服务
  • Android DataBinding库(MVVM设计模式)
  • Linux LVM逻辑卷管理
  • Mysql ERROR 1396 (HY000) 错误的解决办法
  • QImage Mat IplImage 之间的相互转换
  • visual studio如何附加到进程调试python命令
  • 大数据时代的全能日志分析专家--Splunk安装与实践
  • 微软今天发布Windows 7/Server 2008 R2 SP1 RC候选版
  • Android 控件背景颜色处理
  • hadoop集群管理系统搭建规划说明
  • Next.js之基础概念(二)
  • 关于List、List?、ListObject的区别
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • 昨天1024程序员节,我故意写了个死循环~
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #includecmath
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • %check_box% in rails :coditions={:has_many , :through}
  • (¥1011)-(一千零一拾一元整)输出
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (python)数据结构---字典
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .NET开源快速、强大、免费的电子表格组件
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • []指针
  • [BZOJ1060][ZJOI2007]时态同步 树形dp
  • [C#]OpenCvSharp使用帧差法或者三帧差法检测移动物体
  • [C++] new和delete
  • [CSAWQual 2019]Web_Unagi ---不会编程的崽
  • [Docker]十二.Docker consul集群搭建、微服务部署,Consul集群+Swarm集群部署微服务实战
  • [Excel VBA]单元格区域引用方式的小结
  • [GXYCTF2019]BabySQli1
  • [HAOI2016]食物链
  • [HNCTF 2022 WEEK2]easy_include 文件包含遇上nginx
  • [IE9] IE9 beta版下载链接
  • [Java] 什么是IoC?什么是DI?它们的区别是什么?
  • [JS]数据类型
  • [JS7] 显示从0到99的100个数字