这是我的测试示例:
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;
}
Run Code Online (Sandbox Code Playgroud)
它在我打印s的行崩溃.由于"b"是指向派生类的指针,因此reinterpret_cast应该可以正常工作.我想知道为什么它会崩溃.同时,如果我用dynamic_cast替换reinterpret_cast,那么它可以工作.