Boost.Serialization是否释放加载指针期间创建的内存?

时间:2014-04-02 03:20:18

标签: c++ boost-serialization

具体来说,我指的是Boost.Serialization教程here中的演示。

在上面的演示中,bus_top实例作为指针存储在bus_route中,以展示如何实现指针的序列化。但是,我观察到一个有趣的行为,即永远不会为bus_stop::~bus_stop()创建的bus_stop对象调用析构函数restore_schedule()。我在bus_stop::~bus_stop()中设置了一个断点,它仅由delete函数末尾的main语句触发。

在加载序列化数据期间,初始化指针的对象在pointer_iserializer中定义的boost/archive/detail/iserializer.hpp中分配,heap_allocator使用destroy来分配空间。

他们有一个boost/serialization/access.hpp函数来释放{{1}}中已分配的内存,但似乎从未调用过。

Boost.Serialization不管理加载数据期间创建的指针是否正确?

1 个答案:

答案 0 :(得分:2)

结论:

  • 指针在加载过程中存储,它们指向的对象由new创建(即boost::archive::detail::heap_allocatorboost::serialization::access::construct
  • 还有一个boost::serialization::access::destroy,但是AFAIK,它在boost任何地方都没有被调用过。
  • 用户有责任使用boost::serialization(或delete,如果您愿意)释放boost::serialization::access::destroy分配的对象。