スマートポインタはキャストを処理しますか?そうでない場合、この制限を回避する安全な方法は何ですか?スマートポインタはどのようにキャストダウンされるべきですか?
私がしようとしていることの一例は、スマートポインタを含む2つのSTLベクトル(例えば)です。最初のクラスは基本クラスへのスマートポインタを含み、2番目のクラスは派生クラスへのスマートポインタを含みます。スマートポインタはカウントされて参照される。 Boostのshared_ptrsと同様の動作ですが、ハンドロールします。私は例を提供するために、手早くいくつかのサンプルコードが含まれていました:私は、同じオブジェクトを管理する2つのスマートポインタで終わると思うよう
vector<CBaseSmartPtr> vecBase;
vector<CDerivedSmartPtr> vecDer;
...
CBaseSmartPtr first = vecBase.front();
vecDer.push_back(CDerivedSmartPtr(dynamic_cast<CDerived*>(first.get()));
これは、私には安全ではないようです。トラックのあるポイントでは、おそらく一方がオブジェクトを解放し、もう一方はオブジェクトへの参照を保持します。
私が期待しているが動作しないと思うことは、同じオブジェクトを維持しながら、まっすぐなダウンキャストです。
dynamic_cast<CDerivedSmartPtr>(first)
私はまたCBaseSmartPtrを使用するための第2の容器を変更するために探しているだけの使用に意気消沈するべきか?他にも解決策はありますか?
なぜあなたはあなた自身の作っていますか? – GManNickG
これは面白い質問です。スマートポインタの実装の内部に到達するからです。しかし、あなたの戦略にダウンキャスティングを組み込むことは、デザインの欠陥、IMHOを意味することも指摘します。 –
なぜ私が自分自身を作っているのかを答えるために、それはレガシーコードであり、現在の使用法を取り除き、Boostで置き換えることはかなり大きな変更になるでしょう。それは私の "今後のこと"のリストにあります。 – dlanod