1

复制构造函数、深拷贝、常量引用

Q. 在内存管理方面。

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

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

  1. 将对象作为参数传递时的常量引用更有效
  2. 如果我们在没有 const 修饰符的情况下传递 A(A a),则不应该更改的对象可能会被错误地更改
  3. 我们这样做是为了进行 Deep Copy

这三个理由对吗?

请告诉我。谢谢,

4

1 回答 1

3
A(A a)

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

我们有格式:

 A(const A& a)

注意:常量引用实际上是对常量的引用。这意味着我们通过A引用传递对象,并且a在复制a.

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

于 2013-04-23T02:13:40.153 回答