C++ 复制构造函数、深度复制、常量引用

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&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)