2016-11-14 61 views
2

成員函數at()的例外情況,我不能想到由std::vector函數引發的異常,但是由其分配器或其元素構造函數和賦值運算符引發。因此,在實現您自己的分配器時,異常中立可能是一個非常理想的保證。例如,您可以預先分配所有需要的內存,然後依靠分配器的noexcept保證傳播到其容器。是std :: vector異常中立?

C++標準是否提供std::vector<T,Alloc>的異常中立性?

+0

「你可能會分配所有需要的內存」如果你不能這樣做呢? – Arunmu

+1

準確定義這對於你來說意味着什麼「異常中立」 –

+0

@Arunmu如果你不能這樣做,那麼你提前投擲。 –

回答

1

除了內存分配,還有一種情況,其中vector本身也會拋出異常:at()成員函數。如果向量的類的構造函數和賦值運算符(這將作爲修改向量的一部分被調用)不會拋出任何異常,則保證不會拋出任何異常,並且沒有超出範圍的呼叫at()

+0

有沒有涉及'operator ='的怪癖? – Yakk

+0

載體上的'operator ='屬於「內存分配」類別。 –