我很困惑为什么我需要在下面的书中使用此示例中的返回类型和参数列表的引用。他们有什么理由除了占用更少的内存而不是使用pass by value复制所有东西?或者,如果我想进行级联,它还需要处理更多吗?
istream &operator>>( stream &input, PhoneNumber &number)
{
//input whatever
return input;
}
答案 0 :(得分:4)
因为a)流不可复制,b)从流中获取输入意味着改变它,所以你需要修改原始而不是副本(但是会实现)。对PhoneNumber
的引用应该是显而易见的 - 您将从流中获取输入并进入该对象。如果你通过副本传递它,它将在操作员外部不可见,这使整个练习变得毫无意义。
答案 1 :(得分:1)
使用指针和引用的最大原因并不是因为它可以让你使用更少的内存(尽管它确实如此),但是因为它可以让你使用更少的时间。复制对象需要时间,您经常需要分配额外的内存,然后最终解除分配。
更重要的是,诸如流之类的对象根本不应被复制:它们包含与物理对象相关的内部状态, - 磁盘或网络流上的文件, - 以及它们的相关缓冲区,复制没有多大意义。