Ищу функтор, который удаляет свой аргумент:Есть ли стандартный метод удаления?
template<class T>
struct delete_functor
{
void operator()(T* p)
{
delete p;
}
};
Есть ли что-то подобное в std
, tr1
или boost
?
Ищу функтор, который удаляет свой аргумент:Есть ли стандартный метод удаления?
template<class T>
struct delete_functor
{
void operator()(T* p)
{
delete p;
}
};
Есть ли что-то подобное в std
, tr1
или boost
?
C++ 0x добавит std::default_delete
в стандартную библиотеку для поддержки std::unique_ptr
.
Он имеет фактически ту же функциональность, что и ваш delete_functor
, но также специализирован для вызова delete[]
для объектов типа массива.
Спасибо, работает как шарм! – fredoverflow
Что делает 'std :: default_delete
@ user1095108: Если экземпляр 'operator()' создается, программа будет плохо сформирована. Тип, с которым создается экземпляр 'default_delete', может быть неполным во время создания экземпляра шаблона класса, но он должен быть завершен при создании экземпляра' operator() '. –
Boost.Lambda имеет delete_ptr and delete_array
Я не могу заставить это работать. Какой заголовок я должен включить? – fredoverflow
'#include
Мы не имеем права использовать импульс в моей компании, и мы не используем C++ 11 либо, поэтому я использую это:
Я думаю, это то, что вы ищете.
Вы также можете воссоздать его как dtor_fun_t и заменить «delete _ ptr;» по " _ptr-> ~ _Type();" для вызова только дтора. Это будет случай, когда вы, например, использовали диспетчер памяти и место размещения.
Если вы пишете это самостоятельно, btw, то с помощью 'struct delete_functor {template void operator() (T * p) {delete p; }}; ', вам не нужно указывать T при его создании. –
@Steve Cool. хорошо знать! – fredoverflow