通常、例外をスローしないことを保証するいくつかの特別な関数があります。
- デストラクタ
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整数用とポインタ用の2 つの関数を使用します。2 番目の関数でスタック オーバーフローが発生した場合はどうなるでしょうか。オブジェクトが破損します。ではなく、std::exceptionある種のシステム例外だと思いWin32-exceptionます。しかし、関数を呼び出しているため、スローしないことを保証できません。
しかし、すべての信頼できるソースは問題ないswapように使用され、ここで例外がスローされることはありません。なんで?