kawa-tの日記: スマートポインタ
日記 by
kawa-t
現在作成中のSchemeの処理系で参照カウントを利用するのですが、このアイディアそのものはObjective-Cの入門書からとってきたので、動的オブジェクトを共有する必要があればretain、不要になったらreleaseという関数で処理するようにしていました。この方法の場合、スタックや他の動的オブジェクトに入れる時にはretain、不要になったときはreleaseを必ず行う必要があり、対象を間違えたり、処理の順番を間違えたり、処理そのものを書き忘れたりと、不適切な処理を行う可能性が非常に高いですし、実際、そういった書き間違いを何度もしました。
そこで、RAIIを利用して、スコープを外れる際にそこで扱った全ての動的オブジェクトにrelease処理を行うようにし、一方、動的オブジェクトを外部スタックや他の動的オブジェクトに入れる際にはretainした上でそのポインタを渡すラッパークラスを書きました。これで、いちいち、retainやreleaseを書く必要はなくなったのですが、ラッパークラスとして書き始めたので、内部に保持される動的オブジェクト個々のメソッドをいちいち定義しなくてはいけません。
スマートポインタでは、いちいちメソッドを定義したりはしないので、スマートポインタの実装例を眺めていたところ、アロー演算子をオーバーロードすればいいことに気がつきました。で、それを書いたら、専用のスマートポインタが出来上がってました。
そこで、RAIIを利用して、スコープを外れる際にそこで扱った全ての動的オブジェクトにrelease処理を行うようにし、一方、動的オブジェクトを外部スタックや他の動的オブジェクトに入れる際にはretainした上でそのポインタを渡すラッパークラスを書きました。これで、いちいち、retainやreleaseを書く必要はなくなったのですが、ラッパークラスとして書き始めたので、内部に保持される動的オブジェクト個々のメソッドをいちいち定義しなくてはいけません。
スマートポインタでは、いちいちメソッドを定義したりはしないので、スマートポインタの実装例を眺めていたところ、アロー演算子をオーバーロードすればいいことに気がつきました。で、それを書いたら、専用のスマートポインタが出来上がってました。
スマートポインタ More ログイン