【发布时间】:2012-02-23 07:12:32
【问题描述】:
我有一个定义如下的列表:
std::list<int *> m_ilist;
我将ints 添加到列表中:
m_ilist.push_back (new int (x));
我想破坏向量并删除为每个元素分配的内存。
哪个更好:
-
循环遍历列表,在每个迭代器上调用 delete。在此调用 clear() 之后:
for (...) { delete *it; } m_ilist.clear (); -
执行循环但在迭代器上调用擦除:
for (...) { delete *it; m_ilist.erase (); }
更好将被定义为更快/更快/更少的处理。
谢谢。
【问题讨论】:
-
或者使用
std::shared_ptr/std::unique_ptr直接拨打clear? -
@JoachimPileborg:我在那个问题中没有看到 C++11 标记,所以会出现编译器错误。
-
为什么要动态分配
ints?除非您希望能够使用 NULL 作为标记值,并且不能使用任何合法的int值来代替,否则只会浪费时间和内存。即使您需要哨兵,使用 boost 的可选库或std::pair<bool, int>也会更有效。然后你可以在完成后简单地清除列表。 -
@NicolBolas 我们大多数人都认为“C++”的意思是“C++ 的最新稳定/官方版本”,就像 SO 上讨论的所有其他技术一样。
-
@Kos:C++11 还没有完全可以从任何编译器供应商处获得,更不用说被证明是稳定的了。但是,Joachim 的评论可能受益于“(如果这些 C++11 功能可用,否则 boost 或其他等价物)”。
标签: c++ performance list stl