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

来源:互联网 发布:淘宝怎么这么费4g流量 编辑:程序博客网 时间:2024/05/17 04:41

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
原创粉丝点击