Serializacja z użyciem memcpy

Serializacja z użyciem memcpy
M4
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0

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

Kopiuj
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?

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.