C++11 std::shared_ptr + boost::序列化

标签 c++ shared-ptr boost-serialization

<分区>

嗨,有人已经成功地使用 boost::serialization 序列化了 C++11 std::shared_ptr。那里有很多过时的帖子,但没有一个具有可接受的解决方案。我不打算讨论为什么我要使用 std::shared_ptr 只是接受它!

我找到了另一个帖子:boost serialize and std::shared_ptr但它没有回答我如何序列化 std::shared_ptr 的问题,它只建议使用 boost::shared_ptr,这在我的情况下是不可能的。

还有这篇文章How can boost::serialization be used with std::shared_ptr from C++11?也只推荐使用 boost::shared_ptr。

如果有人已经找到设法序列化 std::shared_ptr 的解决方法,我会很感兴趣。

我终于找到了解决问题的方法,请参阅 https://stackoverflow.com/a/14999396/2039157我的答案。

最佳答案

难道不能“只”创建一个序列化器<<和反序列化器>>,将“只”将 shptr 序列化转换为对象指针序列化吗?如果还没有完成,我几乎可以肯定这在 < 100 行代码中是可能的。

此外,我知道您已指定不询问,但我仍然会:当您尝试序列化 shptr 的“X”变量时,为什么不能只序列化取消引用的 *shptr ?这似乎不足以让我费心为 smartptrs 添加序列化.. 嗯.. 好吧。美学。但我仍然认为这是可行的。

无论如何,您可能会碰壁:如果您使用类继承,并且如果您在 shptr 中携带对象通过指向基类的指针,您将遇到一个明显的问题,即序列化器将不知道序列化的实际命令是什么。但这是没有 RTTI 的序列化的经典问题,好吧,你必须以某种方式解决,但这不是 shptrs 的问题。

免责声明:我上次使用 boost::serialization 是几年前的事了。我实际上并没有尝试序列化 shptr,但根据我的内存,这是一个相当开放的框架,相对容易扩展任何自定义类型,所以我认为 shptr 并不比我管理的怪异类更好-序列化:)

关于C++11 std::shared_ptr + boost::序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14974873/

相关文章:

c++ - LPUNKNOWN 的类型转换

c++ - 使指向特定托管对象的所有共享指针无效

c++ - 尝试使用 boost::serialization 和 arcive 反序列化对象时得到 "input stream error"

c++ - 如何从非直接基类继承构造函数?

c++ - C++中的动态堆栈数据类型声明

C++:vector 中的 shared_ptr 没有更新原始的 shared_ptr

c++ - 正确的类型转换以 boost 不同派生类的反序列化

c++ - 促进树的序列化?

c++ - 使用 Windows 内置的 MP3 解码器播放音频?

C++ 智能指针 const 正确性