2010-11-12 85 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