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

C继承中构造和析构的顺序是什么?

DDD
发布: 2024-11-29 12:04:11
原创
757 人浏览过

What's the Order of Construction and Destruction in C   Inheritance?

继承中的构造和析构顺序

考虑以下类层次结构:

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

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

    A a;
};
登录后复制

当B 被创建(如 int main() { B b; }),构造和销毁顺序遵循特定的规则:

构造顺序:

  1. 基类构造函数:首先调用基类(A)的构造函数。
  2. 成员字段构造:派生类的成员字段(B) 按照声明的顺序构造。在本例中,构造了类 A 的实例 a。
  3. 派生类构造函数: 最后调用派生类 (B) 的构造函数。

这将转换为以下调用顺序:

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

销毁顺序:

  1. 派生类析构函数: 首先调用派生类 (B) 的析构函数。
  2. 成员字段销毁: 派生类的成员字段按照与构造时相反的顺序销毁。在这种情况下,类 A 的实例 a 被销毁。
  3. 基类析构函数: 最后调用基类 (A) 的析构函数。

这会导致以下破坏order:

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

因此,构造顺序从基类开始,继续到成员字段,最后到派生类。销毁顺序与构建顺序相反。

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

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