如何通过复制内存在C ++中序列化对象?

时间:2011-11-30 17:08:35

标签: c++ arrays serialization object

在C ++中是否可以通过获取对象的第一个地址的指针来序列化对象并递增此指针直到到达对象的末尾?

如果可能,我如何找到对象的第一个内存地址以及应该在哪个数据类型中存储值?我怎么能在另一边构建对象?

3 个答案:

答案 0 :(得分:3)

在一些非常严格的情况下(POD没有指针/引用;相同的操作系统,CPU架构和序列化管道两端的C ++编译器)相对容易做到。

在更一般的情况下,有许多问题使问题复杂化:

  1. 处理具有非平凡构造函数/析构函数的类;
  2. 处理对象中包含的指针/引用;
  3. 在指针/参考图中循环;
  4. 多态性;
  5. 处理虚拟基类;
  6. 端序;
  7. 字段对齐,填充等;
  8. 原始类型的宽度(int在一个平台上的大小不一定与另一个平台上的int相同);
  9. 版本控制,以便可以在不破坏内容的情况下添加新字段。

答案 1 :(得分:2)

您描述的过程将创建对象的平面副本。如果该对象本身包含指针或引用,则该方案将会中断。

如果要序列化对象,请使用Boost.Serialization等库。

答案 2 :(得分:0)

有几种序列化格式(XDR,ASN1,JSON,YAML),技术和库(如C ++的s11n