73

static_castwithに相当するものは何boost::shared_ptrですか?

つまり、次のようにどのように書き換える必要がありますか

Base* b = new Derived();
Derived* d = static_cast<Derived*>(b);

を使用するshared_ptr場合

boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = ???
4

4 に答える 4

106

使用boost::static_pointer_cast:

boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);
于 2009-03-09T02:48:16.063 に答える
22

スマート ポインターには、 、 、および の 3 つのキャスト演算子がstatic_pointer_castありdynamic_pointer_castますconst_pointer_cast。それらは名前空間boost( によって提供される<boost/shared_ptr.hpp>) または名前空間std::tr1(Boost またはコンパイラの TR1 実装によって提供される) のいずれかにあります。

于 2009-03-09T03:15:40.240 に答える
3

コメントとして: Derived が実際に Base から派生している場合は、静的キャストではなく dynamic_pointer_cast を使用する必要があります。システムは、キャストが正しくない場合を検出する可能性があります。

于 2009-03-09T06:39:58.567 に答える
2

Boost と TR1 の実装によって提供されるキャスト オペレータの数に違いがあることに注意してください。

TR1 は 3 番目の演算子 const_pointer_cast() を定義していません

于 2009-11-16T12:23:17.050 に答える