代码之家  ›  专栏  ›  技术社区  ›  Neel Basu

boost::circular buffer是否确认自动弹出操作

  •  3
  • Neel Basu  · 技术社区  · 14 年前

    是否必须存储 std::shared_ptr 在 boost::circular_buffer ?如果我有 boost::circular_buffer<T*> 循环排队吗 delete 第n+1次插入后自动弹出的元素是什么?

    如果没有,我将如何删除弹出的元素和管理内存泄漏?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Jonathan Wakely    14 年前

    当然不是 强制性的 存储 shared_ptr s、 你可以存储很多不同类型的东西,例如 int

    如果你存储指针,容器不知道它们指向堆上的对象,所以在用新元素覆盖现有元素时不会删除它们,它就不知道删除指针是否安全。指针只是被一个新值覆盖。如果这是指向堆上某个对象的最后一个指针,则表示内存泄漏。这很清楚 documented 不到页面下方四分之一的地方。也许你应该阅读文档。

    如果您存储指向堆对象的指针,并且没有其他方法来管理它们,那么是的,存储 shared_ptr<T> 是合理的(但不是强制性的)。