banner

中,这种方法是一种很“自然”的方法。无论是 Unix 还是 Windows,无论是 C 还是 C++,都有开发人员躲在“免复制”的开发风格之后。这种设计审美居然有这么多支持者,对此我感到很困惑,因为这种设计的开销太大了:当数据结构或缓冲区被传递于库的各层之间时,它们会不止一次地被复制。如果返回值有一个动态变量,那么这个开销可能还会包括多次调用内存管理器进行复制的开销。每次为数据结构分配内存和返回一个指针,都需要多次转换指针的所有权。RVO 和移动语义只能降低部分开销,而且需要开发人员仔细地实现它们。从性能的角度看,“免复制”的设计更加高效。

6.5.5 实现写时复制惯用期填补他所涉足的领域。公司成立仅数

tips

月,他和阿瑟夫就得到了从红杉资本(一家很有名的投资公司)筹资的机会,这家公司曾为

包括雅达利(Atari)、苹果、思科系统、艺电公司(Electronic Arts)和甲骨文等在内的公司

注资。虽然乔和阿瑟夫在公司短短的历史中取得了不少阶段性胜利,但是要向红杉资本筹资

就意味着他们突然面临来自强劲对手的激烈竞争。

乔和阿瑟夫坐在会议室里环顾四周,等待着投资者来开会。会议桌有些陈旧,可以看见

斑驳的痕迹。墙上简单地张贴着几张海报,上面展示着公司最为显著的一些成就。这种装饰

再一次告诉乔,红杉资本绝对不会去投资没有回报的tor=(s2)的返回值被赋给S3。为此,返回String对象或String对象的引用都是可行的,但与Vector范例中一样,通过使用引用,可避免该函数调用String的复制构造函数来创建一个新的String对象。在这个例子中,返回类型不是const,因为方法operator=()返回一个指向s2的引用,可以对其进行修改。

Operator<<()的返回值用于串接输出: 在上述代码中,operator<<(cout, s1)的返回值成为一个用于显示字符串“is coming!”的对象。返回类型必须是ostream &,而不能仅仅是ostream。如果使用返回类型os