Как сериализовать объекты в C ++ через копирование памяти? - PullRequest
3 голосов
/ 30 ноября 2011

Возможно ли в C ++ сериализовать объект, взяв указатель на первый адрес объекта и увеличивая его до достижения конца объекта?

Если это возможно, как я могу найти первый адрес памяти объекта и в каком типе данных я должен хранить значения? И как я мог построить объект на другой стороне?

Ответы [ 3 ]

3 голосов
/ 30 ноября 2011

Это относительно легко сделать в некоторых очень ограничивающих обстоятельствах ( POD без указателей / ссылок; та же ОС, архитектура ЦП и компилятор C ++ на обоих концах канала сериализации).

Существует ряд проблем, которые усложняют ситуацию в более общем случае:

  1. , работающий с классами, которые имеют нетривиальные конструкторы / деструкторы;
  2. , работающий с указателями / ссылками, содержащимисявнутри объекта;
  3. циклы в графе указатель / ссылка;
  4. полиморфизм;
  5. работа с виртуальными базовыми классами;
  6. порядковый номер;
  7. выравнивание полей, заполнение и т. Д .;
  8. ширина типов примитивов (int на одной платформе не обязательно совпадает с размером int на другой);
  9. версиями, чтобыновые поля могут быть добавлены без разбивки.
2 голосов
/ 30 ноября 2011

Процедура, которую вы описываете, создаст плоскую копию объекта.Если бы этот объект содержал указатели или ссылки сам, эта схема сломалась бы.

Если вы хотите сериализовать объекты, используйте библиотеку типа Boost.Serialization .

0 голосов
/ 30 ноября 2011

Существует несколько форматов сериализации (XDR, ASN1, JSON, YAML), методы и библиотеки (например, s11n для C ++)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...