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