gpt4 book ai didi

c++ - C++中关于成员变量和构造函数调用的创建过程

转载 作者:行者123 更新时间:2023-11-30 02:04:34 24 4
gpt4 key购买 nike

当为我的一个类调用构造函数时,我遇到了一个奇怪的错误。本质上,我正在做的是:

我有一个类“A”,它有两个类型为“B”和“C”的成员变量。 “C”必须由类型“B”的成员启动。所以构造函数必须是:

A::A():
c(b)
{}

如果类布局为:

class A
{
B b;
C c;
}

但如果类布局为:

class A
{
C c;
B b;
}

我的第一个猜测是,当然 b 必须在 c 之前创建,如果我要在构造函数中初始化 c(b)。我不知道这是否正确。是 分配任何成员变量之前调用的构造函数?或者是构造函数中引用的成员变量首先分配,然后分配剩余的在构造函数末尾分配的未引用成员变量(例如,如果有构造函数中未引用的另一个成员变量“C c2”)?

我使用的是 Visual Studio 2010。

最佳答案

所以,它的工作方式是:

  1. 开始构建您的对象。
  2. 非虚基类按声明顺序构造。
  3. 虚基类按照声明的顺序构造。
  4. 创建当前类部分(初始化任何 vtable 等)。
  5. 成员变量是按照在类声明中出现的顺序构造的,而不是在初始化列表中。
  6. 您的构造函数主体已执行。
  7. 您的对象构建完成。

我可能弄错了#3 的位置,我很少使用虚拟基础,也很少编写依赖于这些东西的代码。为什么?因为它很复杂,而且这样的代码非常脆弱。

破坏以完全相反的顺序发生。

关于c++ - C++中关于成员变量和构造函数调用的创建过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10439571/

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