条款 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 对象”提供了一份设计实例。

你可能感兴趣的:(条款 21:必须返回对象时,别妄想返回其 reference)