gpt4 book ai didi

c++ - 对象创建顺序,cpp

转载 作者:行者123 更新时间:2023-11-30 02:36:43 25 4
gpt4 key购买 nike

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

A a1 = *(new A);

那么操作顺序是这样的:

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

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

A a2 = *(new A) = a1;

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

我以为会发生什么:

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

你能解释一下我错过了什么吗?

编辑:我明白了,谢谢!

最佳答案

当编译器遇到这行代码 A a2 = *(new A) = a1; 时,它会执行以下操作:

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

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

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

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

关于c++ - 对象创建顺序,cpp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32421566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com