通过动态分配插入List元素

Ale*_*ais 1 c++

假设我有这个简单的代码:

std::list<Class*> mList
mList.insert(mList.begin(), new Class())
Run Code Online (Sandbox Code Playgroud)

我是否需要担心手动解除分配新的Class元素,或者如果我使用erase(),它是否由List负责?

Jer*_*fin 5

你创建它,你需要销毁它.

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

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

因此,即使您Class定义了一个永远无法复制或移动的标识对象,仍然可以将它按值存储在列表中(即使您不能在a中执行相同操作vector).