条款 21:必须返回对象时,别妄想返回其 reference

Effective C++ 中文版 第三版》读书笔记

** 条款 21:必须返回对象时,别妄想返回其 reference **

所谓 reference 只是个名称,他代表某一个既有对象。任何时候看到一个 reference 声明式,你都应该立刻问自己,它的另一个名称是什么?因为他一定是某物的另一个名称。

函数创建新对象的途径有二:在 stack 空间或在 heap 空间创建。如果定义一个 local 变量,就是在 stack 空间创建对象。请记住,任何函数如果返回一个 reference 指向某个 local 对象,都将一败涂地。(如果函数返回指针,而指针指向一个 local 对象,也是一样的结局)。

一个“必须返回新对象”的函数的正确写法是:就让那个函数返回一个新对象。

总结:当你必须在“返回一个 reference 和返回一个 object”之间抉择时,你的工作就是挑出行为正确的那个。就让编译器厂商为“尽可能降低成本”鞠躬尽瘁吧,你可以享受你的生活。

** 请记住: **
绝不要返回 pointer 或 reference 指向一个 local stack 对象,或返回 reference 指向一个 heap-allocated 对象,或返回 pointer 或 reference 指向一个 local stack 对象而有可能同时需要多个这样的对象。条款 04 已经为“在单线程环境中合理返回 reference 指向一个 local static 对象”提供了一份设计实例。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容