Не совсем; for_each
требует функции или объекта, которые могут быть вызваны с помощью ()
, а delete
не является ни функцией, ни объектом. Вам нужно будет обернуть его в функцию (или функциональный объект), например:
struct Deleter
{
void operator()(Obj* obj) {delete obj;}
};
std::for_each(objs.begin(), objs.end(), Deleter());
Но вы должны быть очень осторожны, управляя временем жизни объектов с помощью необработанных указателей, особенно если вы их передаете. Вам нужно будет помнить, чтобы удалить их, если вы удалите их из vector
или переназначите их, или если вы очистите vector
, или если исключение, разрыв или возврат функции могут привести к разрушению вектора. В общем, всегда лучше разделять обязанности по управлению ресурсами и их использованию.
Вам лучше использовать вектор объектов, если Obj
не является полиморфным базовым классом, или объекты действительно большие или достаточно сложные, чтобы их копирование оказало заметное влияние на производительность. Если это так (и вы его профилировали, чтобы убедиться, что это так), вы должны рассмотреть вектор умных указателей (shared_ptr
или unique_ptr
, если ваш компилятор поддерживает это), или Boost's ptr_vector
.
Привычка использовать классы автоматического управления ресурсами избавит вас от многих головных болей в будущем.