通常、例外をスローしないことを保証するいくつかの特別な関数があります。
- デストラクタ
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
ように使用され、ここで例外がスローされることはありません。なんで?