スマートポインタのキャスト

boost::shared_ptrのキャストについてのメモ書きです。

■アップキャスト
これは暗黙の型変換で行えます。

class A {};
class B : public A {};
    boost::shared_ptr<a> a(new A());
    boost::shared_ptr<b> b;
    b = a;

■static_cast
shared_ptrをstatic_castを使って変換できないため、代わりにstatic_pointer_castを使います。

    boost::shared_ptr<int> a(new int(1));
    boost::shared_ptr<double> b(new double(2.0));
    a = boost::static_pointer_cast<int>(b);

■dynamic_cast
これらもstatic_castと使い方はほぼ同様です。
dynamic_castの場合はdynamic_pointer_castを使います。

サンプルソースはstatic_castと変わらないため割愛させていただきます。

COMMENTS & TRACKBACKS

  • Comments ( 1 )
  • Trackbacks ( 0 )
  1. By 匿名

    アップキャストの例は、以下のようになりませんか ?

    shared_ptr b{ new B{ } };
    shared_ptr a;
    a = b;