2010-04-27 4 views
6

Ищу функтор, который удаляет свой аргумент:Есть ли стандартный метод удаления?

template<class T> 
struct delete_functor 
{ 
    void operator()(T* p) 
    { 
     delete p; 
    } 
}; 

Есть ли что-то подобное в std, tr1 или boost?

+1

Если вы пишете это самостоятельно, btw, то с помощью 'struct delete_functor {template void operator() (T * p) {delete p; }}; ', вам не нужно указывать T при его создании. –

+0

@Steve Cool. хорошо знать! – fredoverflow

ответ

10

C++ 0x добавит std::default_delete в стандартную библиотеку для поддержки std::unique_ptr.

Он имеет фактически ту же функциональность, что и ваш delete_functor, но также специализирован для вызова delete[] для объектов типа массива.

+1

Спасибо, работает как шарм! – fredoverflow

+0

Что делает 'std :: default_delete ()' do? – user1095108

+0

@ user1095108: Если экземпляр 'operator()' создается, программа будет плохо сформирована. Тип, с которым создается экземпляр 'default_delete', может быть неполным во время создания экземпляра шаблона класса, но он должен быть завершен при создании экземпляра' operator() '. –

0

Мы не имеем права использовать импульс в моей компании, и мы не используем C++ 11 либо, поэтому я использую это:

Я думаю, это то, что вы ищете.

Вы также можете воссоздать его как dtor_fun_t и заменить «delete _ ptr;» по " _ptr-> ~ _Type();" для вызова только дтора. Это будет случай, когда вы, например, использовали диспетчер памяти и место размещения.