有幾個特殊功能,通常保證不丟excpetions,如:無拋出異常保證和堆棧溢出
- 析構函數
swap
方法
考慮以下swap
實施,如this answer中所述:
friend void swap(dumb_array& first, dumb_array& second)
{
using std::swap;
swap(first.mSize, second.mSize);
swap(first.mArray, second.mArray); // What if stack overlow occurs here?
}
它使用兩個swap
函數 - 整數和指針。如果第二個函數會導致堆棧溢出呢?對象將被損壞。我想這不是std::exception
,它是某種系統異常,如Win32-exception
。但是現在我們不能保證不拋出,因爲我們正在調用一個函數。
但是,所有權威人士僅僅使用swap
就好,沒有例外會在這裏引發。爲什麼?
析構函數不保證不拋出異常。 –
好的,他們通常應該這樣做,儘管他們並不強迫它。 – Mikhail
@KerrekSB:我的事,所以我不知道,如果他們不;-p –