标签: c++
虽然我主要开发C ++,但我并没有在那里得到关于C ++的笑话。关于传递值是默认行为,因此创建了许多副本这个笑话吗?或者是否有其他一些C ++创造了这种声誉?
答案 0 :(得分:3)
与其他OO语言相比,C ++大量使用值语义。许多语言中的代码Object B = A;都会创建一个新引用,但不会创建新的Object。我们称之为引用语义。在这些语言中,您必须编写类似Object B = new Object(A)的内容来制作副本。但是对于价值语义,Object B = A;实际上是一个副本。
Object B = A;
Object B = new Object(A)
第二个原因是C ++不使用垃圾收集。这意味着您经常需要一个对象的副本,以保证其生命周期。 (今天我们有std::shared_ptr)
std::shared_ptr