gpt4 book ai didi

c++ - 将映射中的对象(指针)输出到二进制文件

转载 作者:行者123 更新时间:2023-11-28 07:54:22 24 4
gpt4 key购买 nike

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

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

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 protocol buffers想到了。

另一种方法是自己实现,但这很难,尤其是当您希望在多个平台/操作系统上获得支持时。

关于c++ - 将映射中的对象(指针)输出到二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13085682/

24 4 0
文章推荐: javascript - 如何在AJAX响应中用新内容替换和
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com