Существует несколько способов удаления/удаления элементов вектора.
У меня есть вектор указателей, и мне нужно удалить все из них на деконструкторе класса.
Какой самый эффективный/быстрый способ или даже самый безопасный способ?
// 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);
}
Самый безопасный способ - использовать либо std::vector<std::unique_ptr<Object>>
либо std::vector<std::shared_ptr<Object>>
зависимости от семантики жизни, которая вам нужна для экземпляров Object
.
В любом случае вам не нужно ничего делать в деструкторе; вектор-деструктор уничтожит все экземпляры интеллектуального указателя. В свою очередь, они автоматически Object
экземпляры Object
соответствии с их конкретной семантикой: unique_ptr
удалял их немедленно, а shared_ptr
удалял их, как только никакая другая точка shared_ptr
указывала бы на этот объект.
Очень маловероятно, что будет и более быстрый способ, предполагая, что вам нужно хранить указатели. (Если вам не нужен полиморфизм, тогда вы можете просто использовать std::vector<Object>
который имеет один меньший уровень косвенности.)