析构函数调用

Str*_*dic 0 c++ oop object c++11

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

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

};

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


int main()
{
    A a;
    B b;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出看起来像这样:

BA

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

spe*_*ras 6

在其他答案中清理神话:不,清理顺序与堆栈无关.

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

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

这两者都不相关.什么相关的,虽然是第6.6节:

退出范围(无论多么已完成)时,在该范围内构建的具有自动存储持续时间的对象将按其构造的相反顺序销毁.

从循环中移出一个循环,或者从具有自动存储持续时间的初始化变量返回过去涉及销毁具有自动存储持续时间的对象,这些对象在转移点但不在转移点处的范围内.

大多数架构使用执行堆栈实现此行为的事实是"快乐的巧合",但标准并未强制要求.

另一方面,无论实现是否使用堆栈,都可以保证逆序销毁.