У меня есть вектор указателей как так:удаление вещи из вектора указателей
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);
Каждый из этих ударов вверх по той или иной причине, включая удаление уже удаленных объектов и исключение f итераторы вектора диапазона.
Что мне делать? Я хочу, чтобы иметь возможность повторно использовать тот же вектор и добавить в него дополнительные указатели. Просто используя delete
без очистки все еще оставляет указатели мусора там, правильно?
EDIT: Хорошо, я переключился на shared_ptrs. Теперь у меня есть
vector<shared_ptr<Item> > items;
Тем не менее, когда я items.clear();
, я получаю ошибку «вектор итераторы несовместимыми». Что я все еще делаю неправильно?
Если у вас есть вектор указателей, используйте умные указатели (которые вы должны делать в любом случае). – chris
Как это использовать? :/ – Pojo
google for boost :: shared_ptr –