これが私のテスト例です:
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 は機能するはずです。なぜクラッシュするのか不思議です。同時に、reinterpret_cast を dynamic_cast に置き換えると、機能します。