タイトルが言うように、ポインタがnullの場合、派生クラスへのポインタをキャストした場合、それは安全な操作ですかC++ 11/C++ 14の視点から見ると?ヌルポインタ(単一継承または複数継承)をダウンキャストするために `static_cast`を使用
struct base
{
virtual ~base() = default;
};
struct derived : base {};
struct wrapper
{
using allowed_derived_t = derived;
base* base_ptr = nullptr;
void set_ptr(base* ptr)
{
if (!dynamic_cast<allowed_derived_t*>(ptr))
throw std::logic_error("Check your user code");
base_ptr = ptr;
}
allowed_derived_t* ptr() const
{ return static_cast<allowed_derived_t*>(base_ptr); }
};
私はset_ptr
を呼び出す前に、それを呼び出す場合には、ptr()
方法の安全ですか?ポインタを設定する前に、base_ptr
は必須の型(allowed_derived_t
)ではないため、動的ポインティングオブジェクトは間違った型ではありません(ポインティングオブジェクトがないため)。
そのような状況では、標準は何と言いますか?