在对象初始化中复制构造函数

时间:2012-08-18 11:53:18

标签: c++ class copy-constructor assignment-operator object-initialization

这里的理论怀疑。读一本书,并给出了这样的陈述:StringBad metoo = knot;其中:

  • StringBad是一个类
  • knot是该类的一个对象

作者说以下关于复制构造函数:

  

实现可以选择以两种方式处理此语句   步骤:使用复制构造函数创建临时对象和   然后使用赋值将值复制到新对象。也就是说,   初始化总是调用一个复制构造函数,并使用   =运算符也可以调用赋值运算符。

我的实现只需一步即可完成:

  • 使用复制构造函数创建metoo对象,与此相同:StringBad metoo(knot);

我可以理解其他实现可以分两步完成:

  • 使用默认构造函数创建metoo对象,例如:StringBad metoo;
  • 使用重载的as​​ignment运算符将结对象分配给metoo对象。

但是作者说初始化总是调用复制构造函数。那是对的吗?如果是这样,编译器在一些实现中将遵循哪些步骤来分两步完成它?我无法在我的测试中测试它,因为我说它只是一步完成。

1 个答案:

答案 0 :(得分:2)

作者错了。你所拥有的是一个带有复制初始化的声明语句,唯一可以实现的方法是通过StringBad(StringBad const &)复制构造函数实例化一个新对象。*赋值运算符将永远被调用在这种情况下,甚至不需要存在或无法访问。

两种变体StringBad metoo = knot;StringBad metoo(knot);之间几乎没有区别。

*)或​​非const版本,如果它恰好存在且匹配。