【发布时间】:2019-01-28 05:41:09
【问题描述】:
在下面的代码中,为什么dynamic_cast 不产生Base *?
#include <cassert>
class BaseI;
class SystemI {
public:
virtual ~SystemI() {}
virtual void remove(BaseI *) = 0;
};
class BaseI {
public:
SystemI * system = nullptr;
virtual ~BaseI() {
system->remove(this);
}
};
class Base : public BaseI { };
class System : public SystemI {
public:
System() {
Base base;
base.system = this;
}
void remove(BaseI * basei) override {
Base * base = dynamic_cast<Base *>(basei);
assert(base != nullptr); // <-------------------- fails
}
};
int main() {
System sys;
}
我的意图是创建一种机制,使派生自 BaseI 的组件在删除时自动从系统中删除。
【问题讨论】:
标签: c++