将地图中的对象(指针)输出到二进制文件

时间:2012-10-26 11:01:22

标签: c++ class object map iterator

我有一个带有指向类对象的指针的地图,我试图将它们全部输出到二进制文件然后再读回来。我不相信我的语法是正确的,因为当我回读它们时它们会被破坏,即它们在进入文件之前似乎没有任何数据。在此之前的行我遍历数据并将它们全部输出,所以我知道它们在打印之前是正常的

这是将帐户输出到二进制文件的代码。

for (it = accounts.begin(); it != accounts.end(); it++)
{
    outFile.write((char*)&(*it).second, sizeof(Account));
}

任何人都知道这是否可以?

编辑:而且它不是

for (it = accounts.begin(); it != accounts.end(); it++)
{
    outFile.write((char*)&(*(it->second)), sizeof(Account));
}

3 个答案:

答案 0 :(得分:1)

由于以下几个原因,这不是你如何序​​列化对象:

  • 如果对象是多态的,那么大多数(所有?)实现都会有一个指向对象内部虚拟表的指针,所以你要写它,但是当你读回它时,它就不再有效了。
  • 其他指向成员的指针都写了,但是当你读回它们时没有意义。

序列化并不像将对象的字节写入文件那么容易。

简单的解决方案是使用现有的库 - google protocol buffers可以想到。

另一个是自己实现它,但这很难,尤其是如果你想在多个平台/操作系统上提供支持的话。

答案 1 :(得分:0)

你会看到记忆的地址而已。你必须编写更复杂的方法。有关一些想法,请参阅Google protobuf encoding

答案 2 :(得分:0)

看起来您正在尝试将强制转换为char*的内存地址写入文件。这些数字无关紧要。大概你想要序列化那些指针所指向的对象。首先,您需要找到一种方法来序列化和反序列化该类型的对象,然后通过重新引用地图中保存的指针将它们写入文件。