我正在阅读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