【问题标题】:Copy Constructor, Deep Copy, Constant Reference复制构造函数、深拷贝、常量引用
【发布时间】:2013-04-16 02:24:21
【问题描述】:

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

问。在内存管理方面。

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

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

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

这三个理由对吗?

请告诉我。 谢谢,

【问题讨论】:

  • 嗯,这个怎么样:MyClass obj(MyClass());
  • 您的第二个原因,“A(A a) 没有 const 修饰符”:再看一遍。 const 修饰符并不是你唯一删除的东西。

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


【解决方案1】:
A(A a)

将需要生成a 的副本,因为它是按值传递的。因此,我们需要调用复制构造函数来进行复制。但是,这种情况下,拷贝构造函数并没有被定义,你无法生成a的拷贝,所以应该是引用传递。

我们有格式:

 A(const A& a)

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 2012-11-11
    • 2013-03-09
    • 2013-03-19
    • 1970-01-01
    相关资源
    最近更新 更多