有几个特殊功能,通常保证不丢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 –