有几个特殊功能通常可以保证不抛出异常,例如:
- 析构函数
swap
方法
考虑以下swap
实现,如本答案所述:
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
,这里永远不会抛出异常。为什么?