私は現在MS Visual C++ 6.0の既存のコードを読んでいます。私はオブジェクトを構造体にキャストするコードパターンに気付きました。MSVC++クラス構造体にキャスト
CMemoryオブジェクトがあります。
CMemory a;
MY_STRUCTURE_A* a = (MY_STRUCTURE_A*)(void *)a;
MY_STRUCTURE_B* a = (MY_STRUCTURE_B*)(void *)a;
私はカスタムメモリクラスをチェックしました。これは本当にクラスオブジェクトです。それはa =演算子が定義されていますが、構造体に再解釈することはできません。なぜこれが行われているのですか?オブジェクトタイプはどのようにして異なるオブジェクトにキャストされますか?
なぜこれが行われているのですか?私はreinterpret_castがあることを知っていますし、構造ポインタへのvoidポインタへのキャストのこの技法は似ていると推測しています。しかし、私はそれが同じかどうかは分かりません。このパターンはクラスオブジェクトを構造体にキャストするのに安全ですか?
注:CMemoryは、使用されるオブジェクトの頭文字の名前です。これはMFCクラスの一部ではありません。
Necrolisのコメントに基づいて追加されました。 CMemoryには、(1)charポインタ、(2)intの割り当てられたメモリを指定するint、および(3)CMemoryの他のインスタンスへの前後のポインタで宣言された3つのメンバしかありません。メンバメソッドもたくさんあります。私が理解していることから、たとえクラスを直接構造にキャストしたとしても。クラスはcharポインタである最初のメンバ変数で始まるはずです。
クラスの名前と鋳造で行くclass CMemory {
public:
CAMemory();
... Other methods
private:
char *m_pMemory;
int m_memorySize;
... Other field
}
コメントに基づいてCMemoryに詳細を追加しました。しかし、CMemoryがクラスヘッダーの最初のメンバフィールドまたはクラスヘッダー上のポインタ(おそらく4バイト)を指している場合、私は考えています。私はそれがメモリブロックである最初のメンバ変数を指していると思う。 – Nap