しるふぃずむ

どうもプログラマです。好きなものはC#とジンギスカンです。嫌いなものはJava。プログラムおもちろいね。

Boost.Optional

の,特にについての話.
所有権は要らない=破棄に関与したくないけれど参照が欲しいときがちょくちょくあります.
Boost.Optionalが(現行のものだと色々問題はあるようですが)その要求を満たしてくれそうです.
機能的には生ポインタを持たせれば実現するのはたやすいんですが,
そのオブジェクトの所有権は別のオブジェクトがunique_ptrあたりで持っていたりして
あやまってdeleteするのが怖い,というかdeleteできてしまうのが美しくない.
そんなわけで,shared_ptrからweak_ptrを作るようなイメージで
deleteできない参照するだけのスマートポインタがあればいいのになあ,と思っていたのでした.

今のところはFactoryオブジェクトを作って生成を遅延させつつ直接参照を渡したりしていましたが,
これがあればいくらか書きやすくなる場面が増えそうです.

全然関係ない話題から飛んで
それでも Boost.Optional を使う、大きく分けて2つくらいの理由 - 野良C++erの雑記帳
を眺めていたんですが,boost::optionalの項を見るとまさに欲しかった機能が並んでいます.
オリジナルには幾つか設計が甘い部分があるそうで,
そういった部分の挙動を修正したポインタラッパクラスを作られているようです.
boost::optional<T&> の省メモリな代替

また,C++0x向けに修正したライブラリも書かれているようで,こちらでも参照型に対する挙動は修正されているそうです.
etude/optional.hpp at master · gintenlabo/etude · GitHub
自分の環境ではC++11全開でしかもう書かないと思いますし,
Optional本来の機能もとても使いやすそうなので
使えそうな場面に出くわしたらこちらを使ってみようかと思います.