繁体   English   中英

对象创建的顺序,cpp

[英]order of object creation, cpp

如果我有一个对象A ,我在一行中创建2个对象,如下所示:

A a1 = *(new A);

那么操作的顺序是这样的:

  1. 构造新对象。
  2. 为了创建a1,使用新创建的对象调用CC

现在,在一行中有多个“=”怎么样?

A a2 = *(new A) = a1;

我在ideone上编译了这段代码并得到了只有常规构造函数在这里调用和=运算符,但没有CC,为什么会这样?

我以为将会发生的事情是:

  1. 将在a1上使用CC创建新A.
  2. a2将使用CC on *(新A)创建

你能解释我错过的东西吗?

编辑:我明白了,谢谢!

当编译器遇到这行代码A a2 = *(new A) = a1; 它像以下一样:

  1. 调用A的默认构造函数来创建对象A(从中间)。

  2. 调用operator =将a1复制到作为步骤1创建的新对象中。

  3. 使用步骤2中的结果调用复制构造函数以创建a2。

但是,编译器可能会也可能不会对代码进行一些优化,具体取决于其设置的优化级别。

因为*(new A)已经是构造对象,但是复制构造函数调用恰好构造了左侧对象。 在这种情况下,它不是必需的,因为LHS对象是完全构造的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM