Я сейчас читаю существующий код в MS Visual C ++ 6.0. Я заметил кодовый шаблон, где они приводят объект в структуру.
Существует объект CMemory.
CMemory a;
MY_STRUCTURE_A* a = (MY_STRUCTURE_A*)(void *)a;
MY_STRUCTURE_B* a = (MY_STRUCTURE_B*)(void *)a;
Я проверил класс памяти Custom, и это действительно объект класса. В нем определен оператор =, но я не думаю, что это позволило бы переосмыслить его в структуре. Почему это делается? Как тип объекта приводится к разным объектам?
Есть идеи, почему это делается? Я знаю, что есть reinterpret_cast, и я предполагаю, что этот метод приведения к пустому указателю на указатель на структуру похож. Но я не уверен, если это то же самое. Безопасен ли этот шаблон для приведения объекта класса к структуре?
Примечание: CMemory - это просто произвольное имя используемого объекта. Он не является частью класса MFC.
Добавлено на основе комментария Некролиса.
CMemory и имеет только 3 члена, объявленных в следующем порядке: (1) указатель на символ, (2) int, указывающий выделенную память (1) и (3) предыдущий и следующий указатель на другой экземпляр CMemory. У этого также есть много метода участника. Из того, что я понимаю, даже если я непосредственно приведу класс к структуре. Класс, который должен начаться, должен начинаться с первой переменной-члена, которая является указателем на символ.
class CMemory {
public:
CAMemory();
... Other methods
private:
char *m_pMemory;
int m_memorySize;
... Other field
}