Serializacja z użyciem memcpy

0

Cześć natknąłem się na taki kod:

struct Packet {

    unsigned int packet_type;

    void serialize(char * data) {
        memcpy(data, this, sizeof(Packet));
    }

    void deserialize(char * data) {
        memcpy(this, data, sizeof(Packet));
    }
};

Czy ten kod jest w ogóle poprawny? Jeśli tak to jak działa? Nie rozumiem jak to jest, że kopiujemy wskaźnik this struktury do do wskaźnika na char?

2

Wszystkie wskaźniki na dane (czyli nie na funkcje) można rzutować na wskaźniki na char - takie są reguły języka. Ten kod jest poprawny jeśli Twój typ Packet jest TriviallyCopyable, czyli jeśli jego wszystkie elementy są POD i nie są wskaźnikami. Więc w sumie na tę chwilę wygląda ok, bo typ jest pusty.

Jeśli chodzi o ogólną zasadę - wystrzegałbym się serializacji z użyciem memcpy, ale wszystko zależy od konkretnego przypadku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1