#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
初始化的顺序是什么。 list ?为什么,在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++ - build 者命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3846890/