shared_ptr を使っている時に dynamic_cast が必要な場合は dynamic_pointer_cast を使う2021年01月18日 13時18分48秒

C++ で std::shared_ptr はポインターを自動管理するのに良く使われる。ポインタを使っていると、時折 dynamic_cast が必要になる。shared_ptr を使っていると、get() の戻り値を安直に使うとメモリの管理に支障が起きる。

shared_ptr と dynamic_cast を扱うのが dynamic_pointer_cast。shared_ptr と同じ memory ヘッダファイルにあるので、使うのに大きな問題はない。

#include <memory>

struct Base
{
    virtual ~Base(){};
};

struct Derived : Base
{
};

int main()
{
    std::shared_ptr< Base > ptr = std::make_shared< Derived >();

    std::shared_ptr< Derived > derived = std::dynamic_pointer_cast< Der
ived >( ptr );
}