スマート ポインターはダウン キャストを処理しますか?そうでない場合、この制限を回避する安全な方法は何ですか?
私がやろうとしていることの例は、スマート ポインターを含む 2 つの STL ベクトル (たとえば) を持つことです。1 つ目は基本クラスへのスマート ポインターを含み、2 つ目は派生クラスへのスマート ポインターを含みます。スマート ポインターはカウントされて参照されます。たとえば、Boost の shared_ptrs と同様の動作ですが、手動でロールされます。例を提供するために作成したサンプルコードをいくつか含めました。
vector<CBaseSmartPtr> vecBase;
vector<CDerivedSmartPtr> vecDer;
...
CBaseSmartPtr first = vecBase.front();
vecDer.push_back(CDerivedSmartPtr(dynamic_cast<CDerived*>(first.get()));
同じオブジェクトを管理する 2 つのスマート ポインターで終わると思うので、これは私には安全ではないようです。トラックのどこかの時点で、これはおそらくオブジェクトへの参照を保持している間に、一方がオブジェクトを解放するという結果になるでしょう。
私が望んでいるがうまくいくとは思わないのは、同じオブジェクトを維持しながらまっすぐにダウンキャストすることです。
dynamic_cast<CDerivedSmartPtr>(first)
CBaseSmartPtr を使用し、使用時にのみダウンキャストするように 2 番目のコンテナーを変更する必要がありますか? 他の解決策はありますか?