【发布时间】:2018-09-30 18:10:11
【问题描述】:
我有 3 个继承类:Base -> Intermediate -> Derived。
为什么我使用dynamic_cast时会抛出异常?
class Base { ... };
class Intermediate : public Base { ... };
class Derived : public Intermediate { ... };
Base* base = new Derived();
// No throw
auto intermediate = static_cast<Intermediate *>(base);
auto derived1 = static_cast<Derived *>(base);
auto derived2 = static_cast<Derived *>(intermediate);
// All throw
// (vcruntime140d.dll): Access violation reading location [...].
auto intermediate = dynamic_cast<Intermediate *>(base);
auto derived1 = dynamic_cast<Derived *>(base);
auto derived2 = dynamic_cast<Derived *>(intermediate);
【问题讨论】:
-
base的类型为Derived -
和箭头是错误的。
BaseIntermediate Derived.
标签: c++ inheritance casting dynamic-cast static-cast