boost :: circular_buffer确认自动弹出操作

时间:2012-07-31 19:13:54

标签: c++ boost

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

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

1 个答案:

答案 0 :(得分:2)

当然,强制存储shared_ptr,您可以存储许多不同的类型,例如:像int

这样简单的事情

如果存储指针,容器不知道它们指向堆上的对象,所以当用新元素覆盖现有元素时它不会删除它们,它不会知道它会删除指针是安全的。指针只是用新值覆盖。如果那是指向堆上对象的最后一个指针,则会发生内存泄漏。这显然documented不到页面下方的四分之一。也许你应该阅读文档。

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