C++ C++;堆栈变量被销毁
考虑以下代码:C++ C++;堆栈变量被销毁,c++,C++,考虑以下代码: { std::auto_ptr<Something> p1(pSomePointer); std::auto_ptr<Something> p2(pSomeOtherPointer); ... } { std::auto_ptr p1(pSomePointer); std::auto_ptr p2(pSomeOtherPointer); ... } 是否可以保证退出作用域时p2析构函数将在p1之前调用?常识认为栈变量应该首先从堆栈顶部被破坏
{
std::auto_ptr<Something> p1(pSomePointer);
std::auto_ptr<Something> p2(pSomeOtherPointer);
...
}
{
std::auto_ptr p1(pSomePointer);
std::auto_ptr p2(pSomeOtherPointer);
...
}
是否可以保证退出作用域时p2析构函数将在p1之前调用?常识认为栈变量应该首先从堆栈顶部被破坏,但是C++编译器可以重新排序赋值。p> 是的,它们的销毁顺序与构造顺序相反-最后构造的对象将首先销毁。C++保证了这一点。……并且不仅用于堆栈变量。@ SBI:是的,如果没有注意,后者可能导致各种错误。@ SBI我们还讨论了哪些变量?全局?@Elemental:全局变量的销毁顺序取决于实现。@Elemental:是,全局变量和(命名空间范围或类范围)静态变量。