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

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

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

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

它们有一个destroy函数来释放boost / serialization / access.hpp中的已分配内存,但似乎从来没有被调用过.

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

最佳答案 结论:

>指针在加载期间存储,它们指向的对象由new创建(即boost :: archive :: detail :: heap_allocator,boost :: serialization :: access :: construct)
>还有一个boost :: serialization :: access :: destroy,但是AFAIK,它在任何地方都没有被调用.
>用户有责任释放boost :: serialization分配的对象,使用delete(如果你愿意,可以使用boost :: serialization :: access :: destroy).

点赞