复制构造函数,深层复制,常量引用

时间:2013-04-23 02:11:28

标签: c++ memory-management const copy-constructor deep-copy

复制构造函数,深层复制,常量参考

Q值。在内存管理方面。

A类的复制构造函数的形式为A(const A& a) 为什么参数通过引用传递? 解释为什么我们不能定义A(A a)

形式的构造函数

答案。 我们这样做的三个原因:

  1. 将对象作为参数传递时的常量引用更高效
  2. 如果我们在没有const修饰符的情况下传递A(A a),那么不应该更改的对象可能会被错误地更改
  3. 我们这样做,以便我们可以制作Deep Copy
  4. 这三个原因是否正确?

    请告诉我。 谢谢,

1 个答案:

答案 0 :(得分:3)

A(A a)

需要生成a的副本,因为它是按值传递的。因此,我们需要调用复制构造函数来执行复制。但是,在这种情况下,尚未定义复制构造函数,您无法生成a的副本,因此应该通过引用传递。

我们有格式:

 A(const A& a)

请注意:常量引用实际上是对常量的引用。这意味着我们通过引用传递A的对象,并且在制作a的副本时我们不应该更改a

复制构造函数采用const引用更重要的是临时对象不能绑定到非const引用。因此,复制构造函数必须引用const对象才能复制临时对象。