【问题标题】:What is the difference between these object initialisations? [duplicate]这些对象初始化有什么区别? [复制]
【发布时间】:2016-09-07 20:49:07
【问题描述】:

使用复制构造函数初始化对象有两种类型:

Class object2(val1, val2); // <--- (1)

同样可以通过复制另一个类的内容来完成:

Class object1(val1, val2);
Class object2 = object1;  // <--- (2)

(1)和(2)有什么区别? 它们是显式调用和隐式调用还是与运算符重载有关?

【问题讨论】:

  • (1) 是显式构造,而不是复制构造。 (2)是复制分配。复制构造将是Class object2( object1 ); 如果您不重载复制赋值运算符,它将使用复制构造函数初始化目标对象。
  • 1 ==> 类构造函数; 2 ==> 复制构造函数;
  • 这意味着正在调用第二个复制构造函数。所以 = 运算符没有重载?
  • @paddy 2 永远不会调用复制赋值运算符。

标签: c++ class object constructor copy-constructor


【解决方案1】:

这里

1. 案例1

Class object2(val1, val2);

将使用两个参数调用构造函数

Class(type a, type b);

2. 案例2

Class object2 = object1;

将调用复制构造函数

Class(const Class&);

Demo

【讨论】:

    【解决方案2】:

    两种构造都使用构造函数,但构造函数不同。第一个是带有两个参数的构造函数,第二个通常是复制构造函数(可以默认)。显式声明应该是这样的:

    class Class {
        // constructor taking 2 args
        Class(int val1, const std::string& val2);
        // copy ctor
        Class(const Class& other);
    
        /* you could optionaly have a move ctor:
        Class(Class&& other); */
        ...
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 2020-02-29
      • 2014-03-16
      • 2011-02-26
      相关资源
      最近更新 更多