2010-11-12 50 views
8

考虑下面的代码任何保证:是否有在C++堆栈变量的顺序被破坏

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

是否有任何保证,P2析构函数之前P1的退出范围时叫什么名字?常识说堆栈变量应该先从堆栈顶部销毁,但C++编译器可以重新排列任务。

回答

11

是的,它们按照与施工顺序相反的顺序销毁 - 最后构建的物体将首先销毁。 C++保证这一点。

+2

...不仅适用于堆栈变量。 – sbi 2010-11-12 14:30:22

+0

@sbi:是的,如果不采取措施,后者可能导致各种各样的错误。 – sharptooth 2010-11-12 14:31:47

+0

@sbi我们在谈论什么其他变数?全球? – Elemental 2010-11-12 15:41:01