Безопасно ли предполагать, что поля объекта всегда в порядке их определения, когда этот объект динамически выделяется?
Пример, который работал для меня:
struct Rectangle
{
int len;
int wid;
};
Rectangle* myRect = new Rectangle;
void* vPtr = myRect;
Будет ли *(int*)(vPtr)
всегда эквивалентен myRect->len
и *(int*)(vPtr + sizeof(int))
эквивалентен myRect->wid
?
Будет лиТо же самое происходит и в этом случае?
class Button
{
Rectangle* frame;
Char* Text;
} *myButton;
void * vButton = myButton;
Будет ли *(int*)((*Rectangle)(vButton))
полем len
?
Поскольку я не хочу большую книгу в качестве ответа, я спрошуследующий вопросКогда у меня будет больше таких классов:
#define WND_BUTTON 1
#define WND_EDIT 2
class Button
{
private:
BYTE TypeWindow;
SMALL_RECT srFrame;
*Some other fields*
public:
Button();
*Just functions here*
}
class Edit
{
private:
BYTE TypeWindow;
SMALL_RECT srFrame;
/*Some other fields*/
public:
Edit();
/*Just functions here*/
}
typedef void* HANDLE;
Могу ли я рассчитывать на эту проверку?
HANDLE hWindow = Create(...);
if (*(BYTE*)(hWindow) == WND_BUTTON)
std::cout<<"This is a button."<<std:endl;
if (*(BYTE*)(hWindow) == WND_EDIT)
std::cout<<"This is a text field."<<std:endl;