在传统的C ++中,将值传递给函数和方法对于大型对象而言比较慢,并且通常对此不屑一顾。取而代之的是,C ++程序员倾向于传递引用,这虽然更快,但是却引入了与所有权有关的各种复杂问题,尤其是与内存管理有关的问题(在对象是堆分配的情况下)
现在,在C ++ 11中,我们有了Rvalue引用和move构造函数,这意味着可以实现大对象(例如std::vector
),而该对象很容易通过值传入和传出函数。
因此,这是否意味着默认值应为诸如std::vector
和类型的实例按值传递std::string
?定制对象呢?最新的最佳做法是什么?
const std::string&
副本,而不是副本。然后,第一个线程退出了……
pass by reference ... which introduces all sorts of complicated questions around ownership and especially around memory management (in the event that the object is heap-allocated)
。我不了解所有权的复杂性或问题性?可能我错过了什么吗?