【发布时间】:2016-12-12 19:40:19
【问题描述】:
正如标题所说,如果我将一个指向基类的指针转换为派生类,当指针为空时,从 C++11/C++14 的角度来看,这是一个安全的操作吗?标准?
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),但是,动态指向的对象不是错误的类型(因为没有指向的对象)。
标准在这种情况下怎么说?
【问题讨论】:
标签: c++ pointers polymorphism downcast