gpt4 book ai didi

c++ - 构造顺序

转载 作者:行者123 更新时间:2023-11-30 00:59:43 26 4
gpt4 key购买 nike

#include <iostream>
class A
{
public:
A() { std::cout << " A ctor" << std::endl; }
A(int i) { std::cout << " A ctor i" << std::endl; }
~A() { std::cout << " A dtor" << std::endl; }
};
class B: public A
{
public:
B() : A () { std::cout << " B ctor" << std::endl; }
~B() { std::cout << " B dtor" << std::endl; }
};
class C: public A
{
public:
B _b;

C() : _b (), A () { std::cout << " C ctor" << std::endl; }
~C() { std::cout << " C dtor" << std::endl; }
};
int main ()
{
C c;
}

输出是:

A ctor
A ctor
B ctor
C ctor
C dtor
B dtor
A dtor
A dtor

初始化的顺序是什么?列表?为什么,在 init. C 列表,A 的 ctor 在 B 的 ctor 之前调用?我认为输出应该是:

A ctor
B ctor
A ctor
C ctor
C dtor
A dtor
B dtor
A dtor

谢谢。

最佳答案

在初始化列表中写入初始化的顺序并不重要,初始化顺序由其他规则独立于该列表确定:

  • 首先初始化基类。这就是为什么在 C 的构造中首先调用基类构造函数 A 的原因。属于基类的一切都在这一步构造(基类和属于基类的成员变量),就像构造该基类的普通对象一样。
  • 然后初始化派生类的成员变量,按照它们在类中声明的顺序。所以如果有多个成员变量,它们的声明顺序决定了它们被初始化的顺序。初始化列表的顺序并不重要。

关于c++ - 构造顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3846890/

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