2010-04-27 7 views
6

Busco a un funtor que elimina su argumento:¿Hay algún functor de eliminación estándar?

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

¿Hay algo como esto en std, tr1 o boost?

+1

si estuviera escribiendo esto por sí mismo, por cierto, a continuación, con 'struct {delete_functor plantilla operador void() (T * p) {borrar p; }}; ', no tiene que especificar T cuando crea uno. –

+0

@Steve Cool. ¡bueno saber! – fredoverflow

Respuesta

10

C++ 0x agregará std::default_delete a la biblioteca estándar para admitir std::unique_ptr.

Tiene efectivamente la misma funcionalidad que su delete_functor, pero también está especializada para llamar a delete[] para objetos de tipo array.

+1

¡Gracias, funciona como un encanto! – fredoverflow

+0

¿Qué hace 'std :: default_delete ()' do? – user1095108

+0

@ user1095108: Si se instancia el 'operador()', el programa estaría mal formado. El tipo con el que se instancia el 'default_delete' puede estar incompleto en el momento en que se crea una instancia de la plantilla de clase, pero debe estar completo cuando se instancia el' operator() '. –

0

No se nos permite utilizar impulso en mi compañía, y no estamos usando C++ 11 tampoco, así que utilice esta:

pienso eso es lo que estás buscando.

También puede volver a crearlo como dtor_fun_t y reemplazar "eliminar _ ptr;" por " _ptr-> ~ _Type();" solo llamar al dtor. Este sería el caso donde utilizó un administrador de memoria y una ubicación nueva, por ejemplo.