gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:10:17 26 4
gpt4 key购买 nike

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

在上面的demo中,bus_top实例作为指针存储在bus_route中,展示了指针的序列化是如何实现的。然而,我观察到一个有趣的行为,即析构函数 bus_stop::~bus_stop() 永远不会为 restore_schedule()< 创建的 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_allocatorboost::序列化::访问::构造)
  • 还有一个 boost::serialization::access::destroy,但是据我所知,它没有在任何地方的 boost 中被调用。
  • 用户有责任使用delete(或boost::serialization::access::destroy 如果你喜欢的话)。

关于c++ - Boost.Serialization 是否释放加载指针期间创建的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22800902/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com