首页  >  文章  >  后端开发  >  C标准如何保证一个类中的成员构造函数和析构函数与其他类的成员变量调用的顺序?

C标准如何保证一个类中的成员构造函数和析构函数与其他类的成员变量调用的顺序?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-08 06:31:02468浏览

How does the C   standard guarantee the order of member constructor and destructor calls in a class with member variables of other classes?

成员构造函数和析构函数的调用顺序

问题:

在 C 中,当一个类包含其他类的成员变量时类,它们的初始化和销毁​​的顺序至关重要。考虑下面的程序:

在 C 标准下,是否保证这个程序总是会产生以下输出:

答案:

是的,是的

根据 C 标准第 12.6.2 节,类内成员的初始化和销毁​​遵循特定规则:

初始化顺序

  • 首先初始化虚拟基类(如果有),深度优先,从左到右。
  • 接下来按照声明顺序初始化直接基类。
  • 非静态数据成员按照声明顺序初始化,无论成员初始化的顺序如何。
  • 构造函数体最后执行。

销毁顺序

  • 首先执行析构函数体的复合语句。
  • 非静态数据成员按相反声明顺序销毁。
  • 直接基类按声明顺序销毁。
  • 虚拟基类(如果有)最后销毁,以反向深度优先、从左到右的顺序。

在提供的示例中,Aggregate 结构体的成员按 a、b 和 c 的顺序声明。因此,保证它们将按 A::A、B::B 和 C::C 的顺序初始化,并按相反的顺序 C::~、B::~ 和 A::~ 销毁。

以上是C标准如何保证一个类中的成员构造函数和析构函数与其他类的成员变量调用的顺序?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn