通过动态分配插入List元素

时间:2018-06-18 15:01:43

标签: c++

我们说我有这个简单的代码:

std::list<Class*> mList
mList.insert(mList.begin(), new Class())

我是否需要担心手动取消分配新的Class元素,或者如果我使用erase(),它是否由List来处理?

3 个答案:

答案 0 :(得分:5)

你创造了它,你需要销毁它。

我的建议是尽可能避免这种情况(通常是这样)。将值放在列表中(通常更可取)或考虑使用boost::ptr_list。或者,您可能会考虑类似std::list<std::unique_ptr<Class>>

请注意,std::liststd::vector之间在您需要做出的决定方面存在重大差异。仅举一个非常明显的例子,在vector中,您需要计划集合中的对象随着集合的增长而被复制/移动的事实。这可以排除在某些情况下存储对象。但是,使用std::list时,不需要或不需要复制/移动。列表中的每个节点都是单独分配的,一旦分配,它就不会被复制或移动。事实上,这是首先使用列表的最大原因之一。

因此,即使你的Class定义了一个永远无法复制或移动的身份对象,在列表中按值存储它仍然完全没问题(即使你在{{{1}中也不能这样做{1}})。

答案 1 :(得分:4)

是的,在此示例中,从列表中删除列表或列表被销毁之前,您必须delete列表中的所有元素。

这就是为什么你应该使用std::unique_ptr - 这将确保它自动发生。

答案 2 :(得分:-1)

使用智能指针,它会根据需要释放内存。

#include <memory> 

https://www.google.com/amp/s/www.geeksforgeeks.org/smart-pointers-cpp/amp/