小澤です。ruby-extに移動します。

On Mon, 5 Nov 2001 01:52:43 +0900
Masahiro Sakai (酒井政裕) <zvm01052 / nifty.ne.jp> wrote:

> > > * localeが異なるオブジェクト間の演算はどうすべき?
> > 
> > それはユーザの責任ということで、無視しようかと。
> 
> ちなみにruby_m17nでは、
> エンコーディングが異なったらArgumentErrorにしているようです。

やはりそれが正しいですよね。面倒くさがらずに例外を投げることにします。

> # 一般にwchar_tの中身はlocale依存だと見倣すべきですが、
> # *例外的に* locale非依存だと仮定して良い場合があるので、
> # LOCALE_INDEPENDENT_WCHAR_Tマクロは用意しました。
> # まだ使ってませんが、後々何かに使えるかもと思って。

なるほど、理解しました。

> ががーん!!
> デストラクタってlongjmpされると呼ばれないんですね。
> これは面倒だなぁ。

そのため、Rubyの例外が投げられる可能性がある場面では、std::auto_ptrとか
リファレンスカウントポインタなども使えません。

対策は

 * メモリの開放は、GCに登録してRubyにまかせる。
 * Rubyの例外が飛んでも問題ないように、順番を変える(例外の飛ぶ可能性の
ある処理を先に行う)。
 * RubyとC++の処理を分離する(別の関数にしたり、ブロックで囲んだり)。

でも今回は、rb_ensureでやるしかないですね。