24

voidオブジェクトへのポインタをクラスオブジェクトにキャストする方法は?

4

1 に答える 1

35

static_cast。ポインタが実際に指定された型のオブジェクトを指している場合にのみ、これを行う必要があることに注意してください。つまり、ポインタの値は、そのvoidようなオブジェクトへのポインタから取得されました。

thing * p = whatever(); // pointer to object
void * pv = p;          // pointer to void
thing * p2 = static_cast<thing *>(pv); // pointer to the same object

これを行う必要がある場合は、設計を再考することをお勧めします。型の安全性を放棄しているため、無効なコードを簡単に記述できます。

something_else * q = static_cast<something_else *>(pv);
q->do_something();  // BOOM! undefined behaviour.
于 2012-04-09T10:42:09.477 に答える