C++ 复制构造函数、深度复制、常量引用
复制构造函数、深度复制、常量引用 在内存管理方面 类a的复制构造函数的形式为a(常量a&a) 为什么参数是通过引用传递的? 解释为什么我们不能定义形式为a(a)的构造函数 回答。 我们这样做的三个原因:C++ 复制构造函数、深度复制、常量引用,c++,memory-management,constants,copy-constructor,deep-copy,C++,Memory Management,Constants,Copy Constructor,Deep Copy,复制构造函数、深度复制、常量引用 在内存管理方面 类a的复制构造函数的形式为a(常量a&a) 为什么参数是通过引用传递的? 解释为什么我们不能定义形式为a(a)的构造函数 回答。 我们这样做的三个原因: 将对象作为参数传递时的常量引用更有效 如果我们在没有常量修改器的情况下传递A(A),那么不应该更改的对象可能会被错误地更改 我们这样做是为了能够进行深度复制 这三个理由正确吗 请让我知道。 谢谢 将需要生成a的副本,因为它是按值传递的。因此,我们需要调用复制构造函数来进行复制。但是,在这种情况下
a
的副本,因为它是按值传递的。因此,我们需要调用复制构造函数来进行复制。但是,在这种情况下,复制构造函数尚未定义,您无法生成a
的副本,因此它应该通过引用传递
我们有以下格式:
A(const A& a)
注意:常量引用实际上是对常量的引用。这意味着我们通过引用传递A
的对象,并且在复制A
时不应更改A
复制构造函数接受常量引用更重要的一点是,临时对象不能绑定到非常量引用。因此,复制构造函数必须引用const对象才能复制临时对象。Um,这样如何:
MyClass obj(MyClass())代码>您的第二个原因,“A(A)
不带常量修饰符”:再次查看。const
修饰符并不是你从中剥离出来的唯一东西。
A(const A& a)