gpt4 book ai didi

c++ - 析构调用

转载 作者:太空宇宙 更新时间:2023-11-04 14:52:20 27 4
gpt4 key购买 nike

我是 C++ 的新手,目前正在学习它。
在探索网络和问题时,我在下一段代码中遇到了问题:

class A
{
public:
~A() { cout << "A"; }

};

class B
{
public:
~B() { cout << "B"; }
};


int main()
{
A a;
B b;

return 0;
}

输出看起来像这样:

BA

有人可以解释为什么输出看起来像这样吗?

最佳答案

清除其他答案中的神话:不,清除顺序与堆栈无关。

除了两种情况外,C++ 标准甚至没有定义堆栈的概念:

  • 堆栈展开(作为一个过程)。
  • 堆栈容器适配器。

这里都不相关。 相关的是第 6.6 节:

On exit from a scope (however accomplished), objects with automatic storage duration that have been constructed in that scope are destroyed in the reverse order of their construction.

Transfer out of a loop, out of a block, or back past an initialized variable with automatic storage duration involves the destruction of objects with automatic storage duration that are in scope at the point transferred from but not at the point transferred to.

大多数架构使用执行堆栈实现此行为是一个“巧合”,但标准并未强制要求。

另一方面,逆序销毁保证的,无论实现是否使用堆栈。

关于c++ - 析构调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53032321/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com