Consider the following code:
{
std::auto_ptr<Something> p1(pSomePointer);
std::auto_ptr<Something> p2(pSomeOtherPointer);
...
}
在退出作用域时,有没有任何保证p2析构函数会在p1的析构函数之前调用?常识认为,栈变量应该从栈顶先被销毁,但C++编译器可以重新排序赋值。
Consider the following code:
{
std::auto_ptr<Something> p1(pSomePointer);
std::auto_ptr<Something> p2(pSomeOtherPointer);
...
}
在退出作用域时,有没有任何保证p2析构函数会在p1的析构函数之前调用?常识认为,栈变量应该从栈顶先被销毁,但C++编译器可以重新排序赋值。
是的,它们被销毁的顺序与构造顺序相反 - 最后构造的对象将首先被销毁。C++ 保证了这一点。