c ++ 11 shared_ptr + Boost :: Serialization

时间:2012-10-15 07:50:34

标签: c++ serialization boost shared-ptr

我需要为std :: shared_ptr提供Boost :: Serialization专业化。

我正在编写一个通过Boost :: Asio发送对象的程序,其中许多对象在内部使用shared_ptrs。使用变通方法仅序列化它们所指的对象是非常不舒服的。

我一直在努力创建自己的,看看为Boost :: shared_ptr提供的实现,但我不了解应该如何处理这些对象。

更改Boost :: shared_ptr序列化中的命名空间使得可以序列化指针,但反序列化对我没有用。

作为最后的手段,我可​​以(也许应该)切换到使用std :: unique_ptrs作为我的对象,因为目前它们似乎拥有它们,但这会导致我遇到同样的问题,与unique_ptr。

2 个答案:

答案 0 :(得分:1)

你说你在内部使用std::shared_ptr。那么为什么你不使用boost::shared_ptr代替它,它boost::serialization完全支持它,并具有std::shared_ptr的相同功能?

答案 1 :(得分:0)

我不确定这是否是最好的方法,但似乎有效。

更改了命名空间并将此加载方法添加到从Boost :: shared_ptr特化复制的shared_ptr特化标头中:

template<class Archive, class T>
inline void load(
    Archive & ar,
    std::shared_ptr< T > &t,
    const unsigned int /* file_version */
){
    T * t_ptr;
    ar >> boost::serialization::make_nvp("px", t_ptr);
    t = std::shared_ptr<T>(t_ptr);
}