Самый эффективный / быстрый способ удалить / удалить элементы вектора

0

Существует несколько способов удаления/удаления элементов вектора.

У меня есть вектор указателей, и мне нужно удалить все из них на деконструкторе класса.

Какой самый эффективный/быстрый способ или даже самый безопасный способ?

// 1º
std::for_each(vector.begin(), vector.end(), [] (Object * object) {
    delete object;
});

// 2º
for (int i = 0; i < vector.size(); ++i)
{
    delete vector[i];
}

// 3º
for (auto current = vector.begin(); current != vector.end(); ++current){
    delete (* current);
}
  • 6
    Эта «проблема» будет спорна, если вы использовали смарт-указатели вместо этого.
  • 2
    где рекурсивно?
Показать ещё 3 комментария
Теги:

1 ответ

2
Лучший ответ

Самый безопасный способ - использовать либо std::vector<std::unique_ptr<Object>> либо std::vector<std::shared_ptr<Object>> зависимости от семантики жизни, которая вам нужна для экземпляров Object.

В любом случае вам не нужно ничего делать в деструкторе; вектор-деструктор уничтожит все экземпляры интеллектуального указателя. В свою очередь, они автоматически Object экземпляры Object соответствии с их конкретной семантикой: unique_ptr удалял их немедленно, а shared_ptr удалял их, как только никакая другая точка shared_ptr указывала бы на этот объект.

Очень маловероятно, что будет и более быстрый способ, предполагая, что вам нужно хранить указатели. (Если вам не нужен полиморфизм, тогда вы можете просто использовать std::vector<Object> который имеет один меньший уровень косвенности.)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню