2010-04-27 3 views
6

Sto cercando un funtore che elimina il suo argomento:Esiste un functor di eliminazione standard?

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

C'è qualcosa di simile in std, tr1 o boost?

+1

Se stavate scrivendo questo, btw, quindi con 'struct delete_functor {template void operator() (T * p) {delete p; }}; ', non devi specificare T quando ne crei uno. –

+0

@Steve Cool. buono a sapersi! – fredoverflow

risposta

10

C++ 0x aggiungerà std::default_delete alla libreria standard per supportare std::unique_ptr.

Ha effettivamente la stessa funzionalità del tuo delete_functor, ma è anche specializzato nel chiamare delete[] per gli oggetti di tipo array.

+1

Grazie, funziona come un fascino! – fredoverflow

+0

Cosa fa 'std :: default_delete ()' do? – user1095108

+0

@ user1095108: Se l'operatore '()' è istanziato, il programma sarebbe mal formato. Il tipo con cui 'default_delete' è istanziato può essere incompleto nel momento in cui il modello di classe viene istanziato, ma deve essere completo quando l'operatore'() 'viene istanziato. –

0

Non c'è permesso di usare spinta nella mia azienda, e non stiamo usando C++ 11 o, così io uso questo:

penso questo è quello che stai cercando.

È anche possibile ricrearlo come dtor_fun_t e sostituire "delete _ ptr;" di " _ptr-> ~ _Type();" chiamare solo il d. Questo sarebbe il caso in cui hai usato un gestore di memoria e un posizionamento nuovo per esempio.