复制构造函数或赋值运算符或两者,这里调用?

时间:2013-03-19 07:09:24

标签: c++

考虑以下声明: -

Class A a = b;//Where is b is existing object of class A.

A类有复制构造函数和赋值运算符重载(已实现)。在这种情况下,将调用上述语句,复制构造函数或赋值运算符,还是两者都被调用?

2 个答案:

答案 0 :(得分:6)

这称为 Copy initialization

复制初始化定义为:

T t2 = t1;

根据t1类型,可能有两种情况:

  

如果t1不属于类型 T

  • 它尝试使用隐式转换序列将t1转换为类型 T
  • 然后通过调用复制构造函数将创建的对象复制到t2
  

如果t1属于类型 T

  • 通过调用复制构造函数将t1复制到t2

请注意,复制构造函数调用可能省略 copy elision


此处不涉及任务。仅在将已构造的对象分配给另一个对象时才会进行分配。您的代码语句在一个语句中涉及构造和值赋值,因此本身没有赋值。

答案 1 :(得分:2)

在这种情况下,将调用复制构造函数。因为“A类”类对象“a”被构造成复制已经构造的“A类”对象b的值。

调用赋值运算符的可能性不会影响两个已创建的对象。