通过构造函数初始化集初始化的变量的破坏顺序是什么?

raj*_*noy 2 c++

假设我有A,B和C类

如果我那么容器如下

Container::Container()
:A(10),B(20),C(30)
{
   //Do something specific
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我调用Container的析构函数,即~Container(),我注意到析构函数以相反的顺序被调用,即~C(),~B()然后~A()

这件事总是固定的吗?任何人都可以对构造初始化集的析构函数的顺序进行更多说明吗?

Luc*_*ore 7

订单是固定的,但不是初始化列表.

这是在类中声明成员的相反顺序.

class Container
{
   A a;
   B b;
   C c;
};
Run Code Online (Sandbox Code Playgroud)

当一个Container对象被销毁时,成员被销毁的顺序是c,ba.

如果您按照与声明的顺序不同的顺序初始化成员,某些编译器会发出警告,并保持一致性.


Pup*_*ppy 6

它们总是以相反的构造顺序被摧毁.无论初始化列表中的顺序如何,构造顺序始终是声明的顺序.