例外安全について

「Exceptional C++」の例外安全の部分を読んだが、印象に残ったのは、


メモリ管理の部分を別のクラスに切り出す


という部分だった。メモリ管理は実装詳細だと思うので、常にカプセル化すべきだが、データ構造をカプセル化した上で、さらにもう一段階カプセル化したメモリ管理をデータ構造と別にして、データ構造に持たせるということである。


クライアントはカプセル化されたクラスの中のメモリ管理のクラスは直接見えない。仮にメモリ管理のクラスをクライアントが直接アクセスできるとメモリ確保失敗時に元データへのロールバックを保障できない場合がある。
メモリ確保が成功したら、メモリ確保のクラスのデータとデータ構造のクラスのデータをSwap(交換)することによりアトミックで安全な方法でデータを持たせるようにする。