在构造函数初始化中列出评估顺序

nis*_*waj 2 c++ constructor

我想知道构造函数按声明对象的顺序调用的原因.

我读了这个问题,但我没有把那里指定的原因作为评论.

说明理由是:

它们在成员声明顺序中而不是在构造函数中按顺序构造的原因是,可能有几个构造函数,但只有一个析构函数.析构函数以相反的构造顺序销毁成员.

有人可以解释一下吗?

No-*_*are 7

  1. 与子对象构造函数相比,应始终以相反的顺序调用子对象析构函数(否则太多东西会分崩离析)

  2. 对象可以有多个构造函数,每个构造函数都有自己的列表中的子对象顺序

  3. 如果我们按照特定于每个对象构造函数的顺序调用子对象构造函数,我们将无法获得子对象析构函数的单个订单.

  4. 因此,决定按声明的顺序,不依赖于不同对象构造函数中的子对象的顺序.