具体来说,我指的是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不管理加载数据期间创建的指针是否正确?
答案 0 :(得分:2)
结论:
new
创建(即boost::archive::detail::heap_allocator
,boost::serialization::access::construct
)boost::serialization::access::destroy
,但是AFAIK,它在boost
任何地方都没有被调用过。 boost::serialization
(或delete
,如果您愿意)释放boost::serialization::access::destroy
分配的对象。