std::shared_ptr
是否必须存储在 boost::circular_buffer
中?如果我有一个 boost::circular_buffer<T*>
循环队列 delete
是第 n+1 次插入后自动弹出的元素吗?
如果不是,那么我将如何删除弹出的元素并管理内存泄漏?
最佳答案
当然,存储 shared_ptr
不是强制性的,您可以存储许多不同的类型,例如像 int
这样简单的东西
如果您存储指针,容器不知道它们指向堆上的对象,因此在用新元素覆盖现有元素时它不会删除它们,它无法知道删除指针是否安全。指针只是被一个新值覆盖。如果那是指向堆上对象的最后一个指针,则说明存在内存泄漏。这很明显 documented 不到页面下方的四分之一。也许你应该阅读文档。
如果您存储指向堆对象的指针并且没有其他方法来管理它们,那么是的,存储 shared_ptr<T>
是明智的(但不是强制性的)。
关于c++ - boost::circular_buffer 是否确认自动弹出操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11747336/