shared_ptr の使い方が難しい

4年くらい前のコードを改善することになって苦戦中。。。
すっかり忘れている。

しかも、boost ライブラリを使用していて、
shared_ptr を利用している。

この頃、C++命でいろいろなライブラリを試した時期だった。
1人開発だと柔軟性が在って、逆に統一性が無いのが難点。
まだまだ、日々模索の状況です。

ところで、shared_ptr。
不要になると、瞬時に自動的にメモリを解放してくれて便利なんですが、
継承があるクラスをshared_ptrで使おうとすると、
使い方がいまいち判らない。

きっと、うまい方法が隠されているんじゃないかと思って調べてみると、、、
今頃になって、
- dynamic_pointer_cast<>
- static_pointer_cast<>
という関数でできるらしい事が判明。。。
もっと早く知っていれば。。。

(ちなみに、VCでは、TR1のshared_ptr がサポートされていますね。)

知らなかったので、どうやっていたかというと、、、
例えば、ベースクラスから複数のクラスに派生している場合で、
しかもそのベースクラスがコンポジットをサポートする場合。

全てのノードをベースクラスの shared_ptr と weak_ptr で
扱って、ツリーリストを構築するのですが、そのダウンキャストは
shared_ptr から生ポインタを取り出して、dynamic_cast
して利用していました。

これだと、shared_ptr の御利益が半減してしまっていました。。。

なんだかな。。。
[PR]
by isoq | 2009-01-07 14:04 | C/C++/Win32
e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇
<< ATOK2008定額制サービス... ふろそうじ >>