[英]order of object creation, cpp
如果我有一个对象A
,我在一行中创建2个对象,如下所示:
A a1 = *(new A);
那么操作的顺序是这样的:
现在,在一行中有多个“=”怎么样?
A a2 = *(new A) = a1;
我在ideone上编译了这段代码并得到了只有常规构造函数在这里调用和=运算符,但没有CC,为什么会这样?
我以为将会发生的事情是:
你能解释我错过的东西吗?
编辑:我明白了,谢谢!
当编译器遇到这行代码A a2 = *(new A) = a1;
它像以下一样:
调用A的默认构造函数来创建对象A(从中间)。
调用operator =将a1复制到作为步骤1创建的新对象中。
使用步骤2中的结果调用复制构造函数以创建a2。
但是,编译器可能会也可能不会对代码进行一些优化,具体取决于其设置的优化级别。
因为*(new A)已经是构造对象,但是复制构造函数调用恰好构造了左侧对象。 在这种情况下,它不是必需的,因为LHS对象是完全构造的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.