3
是否需要在boost::circular_buffer
中存储std::shared_ptr
的?如果我有boost::circular_buffer<T*>
,循环队列delete
是在第n + 1次插入后自动弹出的元素吗?does boost :: circular_buffer确认自动弹出操作
如果不是那么我将如何删除弹出的元素和管理内存泄漏?
是否需要在boost::circular_buffer
中存储std::shared_ptr
的?如果我有boost::circular_buffer<T*>
,循环队列delete
是在第n + 1次插入后自动弹出的元素吗?does boost :: circular_buffer确认自动弹出操作
如果不是那么我将如何删除弹出的元素和管理内存泄漏?
当然,它不是强制来存储shared_ptr
s,您可以存储很多不同的类型,例如,作为东西int
如果存储指针的容器不知道他们指向堆中的对象,以覆盖新元素存在的元素时,它不会删除他们那样简单,它无法知道它会可以安全地删除指针。指针刚刚被一个新值覆盖。如果这是堆中对象的最后一个指针,那么你有内存泄漏。这是相当明显的documented不到下一页的四分之一。也许你应该阅读文档。
如果你存储指向堆对象的指针,并且你没有其他方法来管理它们,那么是的,存储shared_ptr<T>
是明智的(但不是强制性的)。
没有提及'unique_ptr'? – 2012-07-31 19:32:49
@MooingDuck,不,因为它不起作用。 – 2012-07-31 19:37:07
@MooingDuck:自boost 1.50开始,'boost :: circular_buffer'尚未更新为支持移动对象。 – 2012-07-31 19:37:13