欢迎光临散文网 会员登陆 & 注册

Effective C++ 第二十八条 Avoid returning “handles” to object internal

2023-01-29 03:03 作者:九思519  | 我要投稿

避免返回 handles 指向对象内部成分

下面有一段代码

我们在之前的学习中知道,以 by-reference 的方式传递用户自定义类型效率总是比 by-value 高,所以这里函数 value 采用 by- reference 的方式传递。但是也会导致一些问题。

我们在函数外部获取了属于 private 的 reference ,然后对其进行修改,这样我们就破坏了 test 的封装性。所以为了避免封装性降低,我们不能让返回一个 non-const 的 reference。

就算是这样,也有可能导致其他错误。

当我们采用 by-value 的方式返回一个 test 的时候,返回的结果是一个临时变量 temp,在函数 getATest 结束的时候,temp 就已经被销毁,但是 ptr 指向 temp.value(),指向一个被销毁的临时变量,也就会导致错误。所以即使是返回 private 成员的 const reference  也依旧会导致错误。这种情况称为 虚吊(dangling handles)。

handles 包括引用、指针和迭代器。在写一个类的时候,尽量不要返回指向内部部分的 handles,内部成分不仅包括 private/protected 修饰的成员变量还有成员函数。但这不是绝对,有时候难以避免。比如 string 的 operator [],对于这种难以避免返回指向内部的 handles。

总结:

避免返回指向内部成分的 handles,遵守这一点即可增强封装性,帮助 const 成员函数的行为像一个 const,并将发生 “dangling handles” 的可能性降低。


Effective C++ 第二十八条 Avoid returning “handles” to object internal的评论 (共 条)

分享到微博请遵守国家法律