对象数组的销毁顺序

Ash*_*ish 5 c++

class MyClass
{
};

void foo
{
    MyClass arr[10]; 
}
Run Code Online (Sandbox Code Playgroud)

我想知道函数返回时数组对象的销毁顺序。

我阅读了关于它的更有效的 C++,它说析构函数的调用顺序与构造函数的顺序相反,如下所示:

for(int i = 9 ; i >= 0 ;i--)
{
    arr[i].MyClass::~MyClass();
}
Run Code Online (Sandbox Code Playgroud)

有人能告诉我原因吗?

sha*_*oth 4

这是 C++ 析构函数调用逆序逻辑的延续。当堆栈分配的对象被销毁时,会以相反的顺序进行,以促进 RAII。尽管这对于数组元素来说并不是真正必要的(它们都是使用默认构造函数构造的,并且构造/销毁的任何顺序都可以),但为了一致性而对它们进行了相同的处理。

  • 它们都是使用默认构造函数构造的,并且构造/析构的任何顺序都可以”。由于无参数构造函数可以访问全局变量(例如类静态),因此它们的构造顺序会对结果数组产生影响。所以我不太清楚你所说的“任何顺序都可以”是什么意思 - 只有一个顺序符合标准的 12.6。该标准可以说顺序是实现定义的,或者可以说它们是按相反的顺序构造的索引中不同质因数的数量,关系由基数 7 中的数字和确定;-) (4认同)