C++栈变量销毁的顺序有保障吗?

8

Consider the following code:

{
  std::auto_ptr<Something> p1(pSomePointer);
  std::auto_ptr<Something> p2(pSomeOtherPointer);
  ...
}

在退出作用域时,有没有任何保证p2析构函数会在p1的析构函数之前调用?常识认为,栈变量应该从栈顶先被销毁,但C++编译器可以重新排序赋值。

1个回答

11

是的,它们被销毁的顺序与构造顺序相反 - 最后构造的对象将首先被销毁。C++ 保证了这一点。


2
不仅适用于堆栈变量。 - sbi
@sbi:是的,如果不小心处理,后者可能会导致各种各样的错误。 - sharptooth
@sbi 我们还在谈论哪些其他变量?全局的吗? - Elemental
@Elemental:全局变量销毁的顺序取决于实现。 - bjskishore123
1
@Elemental:是的,全局变量和(命名空间范围或类范围)静态变量。 - sbi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接