析构函数调用

稻草人

我是 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节:

在退出作用域时(无论如何完成),在该作用域中构造的具有自动存储期的对象将以其构造的相反顺序销毁

移出循环、移出块或返回具有自动存储持续时间的已初始化变量涉及销毁具有自动存储持续时间的对象,这些对象在转移点的范围内,但不在转移到的点的范围内。

大多数架构使用执行堆栈来实现这种行为是“巧合”,但标准并未强制要求这样做。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档