【问题标题】:Boost Serialization - Serialize std::tr1::shared_ptr?Boost 序列化 - 序列化 std::tr1::shared_ptr?
【发布时间】:2010-11-04 07:21:57
【问题描述】:

Boost::Serialization 内置了对boost::shared_ptr<> 的支持。

有没有办法使用这种对std::tr1::shared_ptr<> 的支持?
是否可以从std::tr1::shared_ptr<> 转换为boost::shared_ptr<>

【问题讨论】:

  • 如果你仍然可以使用 boost,为什么不首先使用boost::shared_ptr 呢?
  • 因为接口是 boost-independent。使用 boost::serialization 序列化类只是一个实现细节。如果稍后另一个开发人员决定使用另一个实现进行序列化,该项目仍将依赖于 boost。
  • 为什么不直接使用typedef boost::shared_ptr MySharedPtr,这样你的代码实际上不会依赖于boost,而是依赖于typedef。将来您可以同时更改序列化库和 typedef。

标签: c++ boost c++11 tr1 boost-serialization


【解决方案1】:

由于实现不同,因此无法进行强制转换。此外,使用从 get() 返回的值在另一种 shared_ptr 类型上创建一个 shared_ptr 类型的实例将无法正常工作,因为引用计数将在代码中的不同点变为 0,这会导致在最后一个对象之前删除该对象使用它。 我不是 boost::serialization 的专家,但由于 std::tr1::shared_ptr 和 boost::shared_ptr 的接口几乎相同,你很可能只需克隆 boost 的序列化/反序列化代码::shared_ptr 并且只需要替换 shared_ptr 的命名空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多