【发布时间】:2012-04-19 22:45:53
【问题描述】:
我有一个这样的指针向量:
vector<Item*> items;
我想清除它。我试过了:
for (unsigned int i = 0; i < items.size(); i++)
delete items.at(i);
items.clear();
,
while (!items.empty())
{
delete items.back();
items.pop_back();
}
,
while (!items.empty())
{
delete items.at(0);
items.erase(items.begin());
}
,和
while (!items.empty())
delete items.at(0);
其中每一个都因某种原因而爆炸,包括删除已删除的对象和超出范围的向量迭代器。
我该怎么办?我希望能够重用相同的向量,并在以后向其中添加更多的 Item 指针。只使用delete 而不清除仍然会在那里留下垃圾指针,对吧?
编辑:好的,我已经切换到 shared_ptrs。现在我有
vector<shared_ptr<Item> > items;
然而,当我执行 items.clear(); 时,我收到错误“向量迭代器不兼容”。我还做错了什么?
【问题讨论】:
-
如果您有一个指针向量,请使用智能指针(无论如何您都应该这样做)。
-
除了最后一个之外,它们似乎都还可以。您遇到了什么问题?
-
自 C++11 起就有
std::weak_ptr、std::unique_ptr和std::shared_ptr。他们弃用了 C++03std::auto_ptr。 -
您需要绝对确定您确实想要将指针(或智能指针)而不是对象本身存储到您的容器中(在本例中为向量)。如果不需要,请不要这样做。阅读这些问题:stackoverflow.com/questions/2693651/…、stackoverflow.com/questions/141337/…