gpt4 book ai didi

c++ - 继承中调用构造函数/析构函数的顺序

转载 作者:IT老高 更新时间:2023-10-28 12:30:24 26 4
gpt4 key购买 nike

关于创建对象的一个​​小问题。假设我有这两个类:

struct A{
A(){cout << "A() C-tor" << endl;}
~A(){cout << "~A() D-tor" << endl;}
};

struct B : public A{
B(){cout << "B() C-tor" << endl;}
~B(){cout << "~B() D-tor" << endl;}

A a;
};

在main中我创建了一个B的实例:

int main(){
B b;
}

请注意,B 派生自 A,并且还有一个 A 类型的字段。

我正在尝试找出规则。我知道在构造对象时首先调用它的父构造函数,反之亦然。

字段(在这种情况下为 A a;)呢?当B被创建时,什么时候会调用A的构造函数?我还没有定义初始化列表,是否有某种默认列表?如果没有默认列表?还有关于破坏的同样问题。

最佳答案

  • 构造总是从基础 class 开始。如果有多个基础 class ,则从最左边的基础开始构建。 (旁注:如果存在 virtual 继承,则优先级更高。
  • 然后构建成员字段。它们在声明它们的顺序
  • 最后,class本身就被构造好了
  • 析构函数的顺序正好相反

不管初始化列表如何,调用顺序都是这样的:

  1. 基础class A的构造函数
  2. 将构造class B的字段a(类型为class A)
  3. 派生的class B的构造函数

关于c++ - 继承中调用构造函数/析构函数的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7539282/

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