2012-01-17 57 views
4

我試圖找到一個在線參考來查看幾個std容器的異常安全。std :: bad_alloc之後std :: vector的狀態

std::vector的情況下,它是否保持push_back調用之前的狀態?我會假定矢量的所有對象仍然有效(沒有調用析構函數)。在push_back拋出std::bad_alloc異常之後,std::vector提供了哪些保證?

回答

7

如果拋出,矢量不會改變。即使不是capacity()

根據[container.requirements.general]:

除非另有規定(參見23.2.4.1,23.2.5.1,23.3.3.4和23.3.6.5)在此 第定義的所有類型的容器滿足以下額外要求:

[...]

- 如果異常由的push_back()或push_front()函數拋出,該功能沒有影響。