这是我的测试示例:
struct base {
virtual ~base(){}
int x;
};
struct derived: public virtual base {
base * clone() {
return new derived;
}
derived(): s("a") {}
std::string s;
};
int main () {
derived d;
base * b = d.clone();
derived * t = reinterpret_cast<derived*>(b);
std::cout << t->s << std::endl;
return 0;
}
它在我打印 s 的行崩溃。由于“b”是指向派生类的指针,所以 reinterpret_cast 应该可以正常工作。我想知道为什么它会崩溃。同时,如果我用 dynamic_cast 替换 reinterpret_cast,那么它就可以工作。