次のコードでtrycatchが必要かどうかを調べようとしていました。
std::vector<int> values;
// ignore that this can throw std::bad_alloc
values.push_back(1);
try {
for (std::vector<int>::iterator iter = values.begin();
iter != values.end(); ++iter) {
++(*iter);
}
} catch (const std::bad_alloc&) {
// Is this needed?
}
C ++ 1998標準を調べると、これを示唆する唯一のヒントは、次の文を含むセクション23.1「コンテナ要件」の箇条書き8です。
この引数のコピーは、各コンテナーオブジェクトの存続期間中に、これらのコンストラクターおよびすべてのメンバー関数によって実行されるメモリ割り当てに使用されます。
私の解釈では、コンテナ内のすべてのメンバー関数がアロケータを呼び出すことができるため、すべてのメンバー関数がstd::bad_allocをスローできます。私は過度に妄想的ですか、それとも本当にそうですか?