首页 > 后端开发 > C++ > C 继承中构造函数和析构函数的调用顺序是什么?

C 继承中构造函数和析构函数的调用顺序是什么?

Mary-Kate Olsen
发布: 2025-01-05 20:15:43
原创
963 人浏览过

What's the Order of Constructor and Destructor Calls in C   Inheritance?

继承中构造函数和析构函数的调用顺序

定义继承类时,了解构造函数和析构函数的调用顺序至关重要。考虑以下示例:

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;
};
登录后复制

构造顺序:

  1. 基类构造函数: 基类的构造函数(A ) 初始化派生对象的基础部分。
  2. 成员字段构造:由于B有一个类型为A的字段,因此它的构造函数会调用该字段的构造函数。
  3. 派生类构造函数:最后是派生类(B ) 完成了对象的初始化。

因此,构造顺序是:

  • A()
  • A(a)
  • B()

销毁顺序:

析构函数以相反的顺序调用构造:

  1. 派生类析构函数:派生类(B)的析构函数启动清理过程。
  2. 成员字段析构: A (a) 类型的字段被破坏。
  3. Base类析构函数:最后由基类(A)的析构函数完成销毁。

销毁顺序是:

  • ~B()
  • ~A(a)
  • ~A()

初始化列表:

即使 B 中没有定义显式初始化列表,默认初始化列表由编译器自动生成。该列表使用默认构造函数初始化基类(A)和成员字段(a)。

综上所述,继承中构造函数和析构函数的调用顺序遵循特定规则:构造函数首先初始化基类,然后成员字段,最后是派生类。析构函数以相反的顺序调用清理过程。了解这些规则对于使用继承编写健壮的代码至关重要。

以上是C 继承中构造函数和析构函数的调用顺序是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板