c++11 shared_ptr + Boost::Serialization

c++11 shared_ptr + Boost::Serialization

本文关键字:Boost Serialization ptr shared c++11      更新时间:2023-10-16

我需要 Boost::Serialization specialization for std::shared_ptr。

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

我一直在尝试自己制作,查看为 Boost::shared_ptr 提供的实现,但我缺乏对这些对象应该如何处理的理解。

更改 Boost::shared_ptr 序列化中的命名空间使序列化指针成为可能,但反序列化对我不起作用。

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

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

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

更改了命名空间,并将此加载方法添加到从 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);
}