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
?
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
?
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.
¡Gracias, funciona como un encanto! – fredoverflow
¿Qué hace 'std :: default_delete
@ 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() '. –
Boost.Lambda tiene delete_ptr and delete_array
No puedo hacer que esto funcione. ¿Qué encabezado debo incluir? – fredoverflow
'#include
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.
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. –
@Steve Cool. ¡bueno saber! – fredoverflow