避免返回handles指向对象内部内容

References, 指针和迭代器统统都是所谓的handles(号码牌,用来取得某个对象)。

返回handles一方面降低了类的封装性,即令成员函数返回一个访问级别较低的成员;另一方面会造成虽然使用const成员函数,但是对象的状态依然被改变(可令返回常量避免)。最重要的问题是dangling handles(悬挂号码牌):handles所指向的东西(所属对象)不复存在。

必须返回对象时,别妄想返回其reference!

函数创建新对象的方式有两种,在stack空间或在heap空间创建。在stack空间创建的变量是local变量,当程序运行结束,对象就会被销毁,故而造成reference指向一个残骸。另一方面,我们可能会寻求heap对象的帮助,众所周知,heap空间只能通过new或malloc申请,如果程序需要大量产生这种new出来的临时对象,那么如果delete掉则需要认真考虑了。也许我们还不放弃,既然stack对象生存期太短,new对象资源管理又麻烦,那我就生成一个static对象,什么都不用担心。只能呵呵了。static变量只会在模块或者函数内保存一个备份,如果多个对象访问这一个函数,那么他们操作的将是同一个static对象,再加上都加都是reference的关系。这个量只能是共享了。能不能,你的代码了。

一个“必须返回新对象”的函数正确的写法是:返回一个新对象,而不是引用。

其实如果没有dangling的风险又对封装要求不高,尝试返回引用还是可以的,比如operator[]s就是返回references指向“容器内的数据”。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值