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



我有一个带有指针的映射到类的对象,我正在尝试将它们全部输出到二进制文件中,然后将其读回。我不相信我的语法正确,因为当我回信它们时,它们被打破了,即,似乎没有在档案进入文件之前给出的任何数据。在此之前,我会通过数据迭代并输出所有内容,因此我知道它们在打印之前还可以

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

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));
}

这不是您出于多种原因序列化对象的方式:

  • 如果对象是多态性的,则大多数(全部?)实现将有一个指向对象内的虚拟表的指针,因此您要编写它,但是当您回复它时,它不再有效。
  • 编写了其他指针,但当您回信时毫无意义。

序列化并不像编写对象的字节要文件。

简单的解决方案是使用现有库-Google协议缓冲区的想法。

另一个是自己实施,但这很难,尤其是如果您想在多个平台/操作系统上支持。

看起来您正在尝试将施放到char*的内存地址写入文件。这些数字将没有任何相关性。大概您想序列化这些指针指向的对象。因此,首先,您需要找到一种序列化和去序列化对象的方法,然后通过重新引用地图中持有的指针来将其写入文件。

您将看到内存的地址,而不再是。您必须写更复杂的方法。请参阅Google Protobuf编码一些想法。

最新更新