2012-07-31 36 views
3

是否需要在boost::circular_buffer中存储std::shared_ptr的?如果我有boost::circular_buffer<T*>,循环队列delete是在第n + 1次插入后自动弹出的元素吗?does boost :: circular_buffer确认自动弹出操作

如果不是那么我将如何删除弹出的元素和管理内存泄漏?

回答

2

当然,它不是强制来存储shared_ptr s,您可以存储很多不同的类型,例如,作为东西int

如果存储指针的容器不知道他们指向堆中的对象,以覆盖新元素存在的元素时,它不会删除他们那样简单,它无法知道它会可以安全地删除指针。指针刚刚被一个新值覆盖。如果这是堆中对象的最后一个指针,那么你有内存泄漏。这是相当明显的documented不到下一页的四分之一。也许你应该阅读文档。

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

+0

没有提及'unique_ptr'? – 2012-07-31 19:32:49

+0

@MooingDuck,不,因为它不起作用。 – 2012-07-31 19:37:07

+0

@MooingDuck:自boost 1.50开始,'boost :: circular_buffer'尚未更新为支持移动对象。 – 2012-07-31 19:37:13