Bezelの各コンテナの例外安全性は、操作ごとに個別に定義されている。大まかには、同名の標準コンテナと同じ例外安全保証があるものと考えてよい。詳細は本文書内の各コンテナのリファレンスに明記されている: 例えばvectorであれば、表 7.18. 「vectorの例外安全性と計算量」を参照のこと。
また、Bezelのすべてのコンテナとポリシークラスは例外中立である [1] 。
通常設定のBezelのコンテナは、例えば記憶領域の確保に失敗したときなどには例外を送出する。freestanding環境で使用するなどの理由で例外送出を抑制したいのであれば、必要な箇所に例外を送出しないポリシーを明示すること。例外を送出し得る操作はコンテナごとに異なるためポリシーの指定方法にも差異があるが、例えばvectorでは次のようにすればよい。
例 3.12. 例外を送出しないvector
#include <bezel/array_allocation_policy/std_malloc.h>
#include <bezel/error_reporting_policy/std_abort.h>
#include <bezel/vector.h>
void foo()
{
using namespace bezel::vector;
using namespace bezel::array_allocation_policy;
using namespace bezel::error_reporting_policy;
typedef vector<
int,
allocation_is<std_malloc<std_abort> >,
at_error_reporting_is<std_abort>,
reserve_error_reporting_is<std_abort>
> C;
...
}
vectorが例外を送出するのは、記憶領域の割り当てに失敗したとき、reserveに失敗したとき、atに不正な値を指定したときの3通りである
[2]
。この例では、記憶領域の割り当てにはstd::mallocを用い、失敗時は例外を送出するのではなくstd::abortにてプログラムを終了するよう指示している。atとreserveに対しても同様にstd::abortを用いる。
あるいは、Bezelをインストールする際に例外の送出を抑制するよう指示してもよい(詳細は項2.2. 「自動インストール」または項2.3. 「手動インストール」を参照のこと)。これにより、デフォルトで選択される各ポリシーが例外を送出しないものに変更される。