是否可以保证销毁C++堆栈变量的顺序

S. *_*iev 8 c++

请考虑以下代码:

{
  std::auto_ptr<Something> p1(pSomePointer);
  std::auto_ptr<Something> p2(pSomeOtherPointer);
  ...
}
Run Code Online (Sandbox Code Playgroud)

是否保证在退出示波器时p1析构函数将在p1之前被调用?常识说堆栈变量应首先从堆栈顶部销毁,但C++编译器可以重新排序分配.

sha*_*oth 11

是的,它们按照与施工顺序相反的方式被销毁 - 最后构建的对象将首先被销毁.C++保证了这一点.

  • ......而且不仅仅是堆栈变量. (2认同)