为什么数据成员的破坏顺序很重要?

Tho*_*son 7 c++

我在一些书中看到,类中​​数据成员的销毁顺序应该与它们的构造顺序相反.这条规则的原因是什么?任何例子都表示赞赏.

Jam*_*lis 12

这在很大程度上是为了保持一致性.当按顺序创建多个对象时,它们总是以相反的顺序销毁.例如,请考虑以下带有自动变量的示例:

{ 
    A a;
    B b(a);
}   // b.~B() is called, then
    // a.~A() is called
Run Code Online (Sandbox Code Playgroud)

在这里,b用途a.通过保证对象以其构造的相反顺序被销毁,C++使对象生命周期管理变得更加容易.

在类中,您可以在初始化另一个数据成员时将引用传递给一个数据成员.确保以相反的顺序销毁对象,您将获得与自动变量相同的行为:

struct S
{
    A a;
    B b;

    S() : a(), b(a) { }
};
Run Code Online (Sandbox Code Playgroud)

请注意,让数据成员互相引用通常不是一个好主意,但它既可能也可能偶尔有用.


Edw*_*nge 5

我想也许你误会了.这不是成员应该按此顺序销毁,而是指定成员.

在极少数情况下,了解项目被销毁的顺序非常重要.

无论如何,这就是物体被摧毁的顺序,你无能为力,但知道它正在发生的事情.