Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;堆栈变量被销毁_C++ - Fatal编程技术网

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:是,全局变量和(命名空间范围或类范围)静态变量。