Есть ли стандартный функтор удаления?
Я ищу функтор, который удаляет его аргумент:
template<class T>
struct delete_functor
{
void operator()(T* p)
{
delete p;
}
};
есть ли что-то подобное в std
, tr1
или boost
?
3 ответов
C++0x добавит std::default_delete
в стандартную библиотеку для поддержки std::unique_ptr
.
Он имеет ту же функциональность, что и ваш delete_functor
, но также специализирован для вызова delete[]
для массива объектов типа.
нам не разрешено использовать boost в моей компании, и мы также не используем C++11, поэтому я использую это:
namespace
{
// - for use to deletion:
// std::vector<int*> foobar;
// std::for_each(foobar.begin(), fooabr.end(), del_fun<T>());
template<class _Type>
struct del_fun_t:
public unary_function<_Type*, void>
{
void operator()(_Type* __ptr) {
delete __ptr;
}
};
template<class _Type>
del_fun_t<_Type> del_fun()
{
return del_fun_t<_Type>();
};
};
Я думаю, что это то, что вы ищете.
вы также можете воссоздать его как dtor_fun_t и заменить " delete _ptr; "by"_ptr - > ~_Type ();" для вызова только dtor. Это будет случай, когда вы использовали менеджер памяти и размещение нового, например.