手続き型と例外は相性が悪い。

{
a();
b();
c();
}
aを呼んだらcは必ず実行しなければならない。
cを実行しなかった場合の動作は未定義であるとする。
こういう場合、bで例外が投げられたらプログラムは安全に続行不可能
という意味で破綻する。クラスに置き換えても同じだ。

{
o->a();
o->b();
o->c();
}

オブジェクト指向はこの問題を解決しない。
(C++の自動デストラクタに頼るしかない。これはOOとは何の関係もない)