清除指针的最佳方法是什么

What is the best way to clear out a Deque of pointers?

本文关键字:方法 是什么 最佳 指针 清除      更新时间:2023-10-16

可能的重复项:
C++ STL:哪种迭代方法在 STL 容器上更好?

在我目前的项目中,我有一个 STL Deque 指针。我还有一个方法,旨在删除这些指针指向的所有对象。我想出了两种不同的方法来实现这一目标,但我无法决定哪种是首选方法。

方法 1.

for (deque<MyType*>::const_iterator it = myDeque.begin(); it != myDeque.end(); ++it)
{
    delete *it;
}
myDeque.clear();

方法 2.

for (int i = 0; i < myDeque.size(); ++i)
{
    delete myDeque[i];
}
myDeque.clear();

这两种方法都应该有效,但哪一种更可取?方法 1 使用 STL,但方法 2 要简单得多。除了代码清洁之外,有什么理由应该使用一种方法而不是另一种方法吗?在这种情况下使用迭代器有什么好处,尽管创建迭代器会产生一点开销?

注意:此问题适用于其他 STL 序列容器,而不仅仅是 Deque。

除非你真的需要使用指针集合,否则只需使用对象集合并完成它。

如果您确实需要指针集合,那么您可能希望使用 Boost 指针容器之类的东西来自动删除指针项。

我会说 1 更有效率,因为增量比随机访问更有效。随机访问需要检索必要的常量并进行完全加法,而增量通常在硬件中非常有效地实现。

但是,当然,初始化迭代器需要一些成本,因此迭代器变得更高效的元素数量有一个阈值,但我希望这个数字会很低。

我不知道

这两种方法之间是否有任何区别,但我会使用这个:

std::vector<boost::shared_ptr<MyType*> > vec