web-dev-qa-db-ja.com

C ++タイプキャスト:voidポインターからクラスポインターにポインターをキャストします

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

17
Naveen

とともに 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.
27
Mike Seymour