gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:47:22 24 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,则从最左边的基开始构造。 (旁注:如果存在虚拟 继承,则优先级更高)。
  • 然后构造成员字段。它们被初始化在宣布的顺序
  • 最后,构建本身
  • 析构函数的顺序正好相反

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

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

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

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