Здесь есть две проблемы: сам лямбда-синтаксис и как получить тип значения контейнера:
Чтобы вызвать функцию mydelete()
для каждого указателя (при условии, что вы определили функцию-член mydelete()
):
for_each(c.begin(), c.end(), [](typename T::value_type x){ x->mydelete(); } );
Чтобы удалить их с помощью оператора удаления:
for_each(c.begin(), c.end(), [](typename T::value_type x){ delete x; } );
Кроме того, лямбда не обязательно самая крутая новая функция в C ++ 11 для данной проблемы:
for(auto x : c) { delete x; }
Я бы заметил, что немного глупо брать const ссылку на контейнер и удалять все в нем, хотя язык не останавливает вас из-за указателей. Вы уверены, что это «постоянная» операция, в смысле и использовании вашего контейнера?
Если вы пишете этот код, возможно, вам пригодятся Контейнеры повышения указателя или контейнеры shared_ptr
.