【发布时间】:2011-10-26 03:37:32
【问题描述】:
我不是 C++ 专家,但我过去曾多次对事物进行序列化。不幸的是,这一次我试图序列化一个包含 std::string 的类,我理解这很像序列化指针。
我可以将类写出到文件中,然后再次读回。所有 int 字段都很好,但 std::string 字段给出了“地址越界”错误,可能是因为它指向的数据不再存在。
对此有标准的解决方法吗?我不想回到 char 数组,但至少我知道它们在这种情况下工作。如有必要,我可以提供代码,但我希望我已经很好地解释了我的问题。
我通过将类转换为 char* 并使用 fstream 将其写入文件来进行序列化。阅读当然正好相反。
【问题讨论】:
-
IMO,您必须手动转储字符串数据。准备一个具有字符缓冲区和字符串长度的普通结构并将其序列化而不是原始对象。
-
唯一真正的问题是如何分隔字符串,但使用 char 数组也会遇到这个问题。我没有得到你遇到麻烦的地方,似乎很容易序列化一个字符串给我。也许你最好发布一些代码。
-
java 有标准的序列化(在标准库中)。 C++ 在语言和 STL 库中都没有这样的功能。有一个外部库可以做到这一点,例如boost可以做到这一点。其他变体是使用 google 的协议缓冲区。
-
吹毛求疵:你正在序列化一个对象。
-
中间结构对我来说确实有意义。这确实引出了一个问题,为什么我首先要为这些字符串烦恼,从长远来看,这似乎是一种虚假的经济。
标签: c++ serialization binaryfiles