我不是 C++ 专家,但过去我已经序列化了几次。不幸的是,这次我试图序列化一个包含 std::string
的类,我理解这很像序列化指针。
我可以把类写到一个文件中,然后再读回来。所有 int
字段都很好,但 std::string
字段给出“地址越界”错误,可能是因为它指向的数据不再存在。
有没有标准的解决方法?我不想回到 char
数组,但至少我知道它们在这种情况下工作。如有必要,我可以提供代码,但我希望我已经很好地解释了我的问题。
我通过将类转换为 char*
并将其写入带有 std::fstream
的文件来进行序列化。阅读当然正好相反。
原文由 iwasinnamuknow 发布,翻译遵循 CC BY-SA 4.0 许可协议
不幸的是,这仅在不涉及指针的情况下才有效。你可能想给你的课程
void MyClass::serialize(std::ostream)
和void MyClass::deserialize(std::ifstream)
,然后打电话给他们。对于这种情况,您需要您可能还希望重载流运算符以便于使用。