将指向自定义对象的指针向量存储到文件中

Posted

技术标签:

【中文标题】将指向自定义对象的指针向量存储到文件中【英文标题】:Store a vector of pointers to custom objects to file 【发布时间】:2012-09-05 14:30:44 【问题描述】:

我正在使用 boost 示例代码将对象指针向量存储在文件中。 我的向量是:

class VOMC
public:
    vector<State*> vomc;
...
...
private:
    friend class boost::serialization::access;
    template<class Archive>
    void serialize(Archive & ar, const unsigned int version)
    
        ar & vomc;
    

这给了我以下错误(还有更多):

/usr/local/include/boost/serialization/access.hpp:118:9: error: ‘class State’ has no member named ‘serialize’

错误可能告诉我,我也应该让我的 State 对象可序列化(不确定那个)。此外,我很困惑,因为存储指针(内存地址)不存储实际数据,这些数据将在程序终止时释放。有没有针对上述情况的解决方法?即使没有提升。

【问题讨论】:

是的,State 必须是可序列化的,实际对象将被序列化(“深度”序列化)。请阅读手册:boost.org/doc/libs/1_51_0/libs/serialization/doc/index.html 【参考方案1】:

您的State 类需要serialize 方法。

http://www.boost.org/doc/libs/1_51_0/libs/serialization/doc/index.html

数组 stop 的每个成员都将被序列化。但请记住,每个成员都是一个指针——那么这到底意味着什么?这种序列化的整个目标是允许在另一个地点和时间重建原始数据结构。 为了使用指针完成此操作,仅保存指针的值是不够的,必须保存它指向的对象。稍后加载成员时,必须创建一个新对象并将新指针加载到类成员中

我也认为你应该阅读serialization of pointers

【讨论】:

以上是关于将指向自定义对象的指针向量存储到文件中的主要内容,如果未能解决你的问题,请参考以下文章

将地址存储到向量中的堆栈分配对象

Java中自定义类和基本类型声明的数组,在对内存中存储的内容、方式和内存地址指向方面有啥区别?

如何在类向量中存储/使用外部函数指针

无法从文件复制到指向对象的指针向量

我应该在哪里存储对象列表?

我是不是正确删除了指向对象的指针向量?