我正在閱讀MS Visual C++ 6.0中的現有代碼。我注意到一個代碼模式,它們將對象投射到一個結構中。MSVC++類強制轉換爲struct
有一個CMemory對象。
CMemory a;
MY_STRUCTURE_A* a = (MY_STRUCTURE_A*)(void *)a;
MY_STRUCTURE_B* a = (MY_STRUCTURE_B*)(void *)a;
我檢查了自定義內存類,它確實是一個類對象。它確實定義了一個=運算符,但我不認爲這將允許它被重新解釋爲結構。爲什麼這樣做。對象類型如何轉換爲不同的對象?
任何想法爲什麼這樣做?我知道有一個reinterpret_cast,我猜測這種將void指針指向結構指針的技巧是類似的。但我不確定它是否一樣。該模式是否安全地將類對象轉換爲結構體?
注意:CMemory只是使用的對象的名稱。它不是MFC類的一部分。
根據Necrolis的評論添加。 (1)char指針,(2)int指定(1)的分配內存,以及(3)指向其他CMemory實例的前一個和下一個指針。它也有很多成員方法。據我所知,即使我直接把一個班級安排到一個結構上。該類將開始應該是第一個成員變量,它是char指針。
class CMemory {
public:
CAMemory();
... Other methods
private:
char *m_pMemory;
int m_memorySize;
... Other field
}
我根據您的評論向CMemory添加了詳細信息。但我想如果CMemory指向第一個成員字段或類頭上的指針可能是4個字節的類頭。我認爲它會指向第一個成員變量,它是內存塊。 – Nap 2012-01-31 12:20:22