2010-04-27 17 views
6

ich für eine Funktors suchen, die ihr Argument löscht:Gibt es einen Standard-Lösch-Funktor?

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

Gibt es so etwas in std, tr1 oder boost?

+1

Wenn Sie dies selbst schreiben, BTW, dann mit 'struct delete_functor {Vorlage void operator() (T * p) {löschen p; }}; ', Sie müssen T nicht angeben, wenn Sie eines erstellen. –

+0

@Steve Cool. gut zu wissen! – fredoverflow

Antwort

10

C++ 0x fügt der Standardbibliothek std::default_delete hinzu, um std::unique_ptr zu unterstützen.

Es hat effektiv die gleiche Funktionalität wie Ihre delete_functor, ist aber auch spezialisiert auf delete[] für Array-Typ-Objekte aufrufen.

+1

Danke, funktioniert wie ein Charme! – fredoverflow

+0

Was bedeutet 'std :: default_delete ()'? – user1095108

+0

@ user1095108: Wenn der 'operator()' instanziiert wird, wäre das Programm schlecht formatiert. Der Typ, mit dem "default_delete" instanziiert wird, ist möglicherweise zum Zeitpunkt der Instanziierung der Klassenvorlage unvollständig, muss jedoch vollständig sein, wenn der 'operator()' instanziiert wird. –

0

Wir sind nicht in meiner Firma zu verwenden Boost erlaubt, und wir sind nicht C++ 11 entweder verwenden, so dass ich dies:

Ich denke, das ist was du suchst.

Sie können es auch als dtor_fun_t neu erstellen und ersetzen "delete _ ptr;" von " _ptr-> ~ _Type();" nur den dtor anrufen. Dies wäre der Fall, wenn Sie beispielsweise einen Speichermanager und eine neue Platzierung verwendet haben.