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
?
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
?
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.
Danke, funktioniert wie ein Charme! – fredoverflow
Was bedeutet 'std :: default_delete
@ 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. –
Boost.Lambda hat delete_ptr and delete_array
Ich kann das nicht zur Arbeit bringen. Welchen Header muss ich hinzufügen? – fredoverflow
'#include
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.
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. –
@Steve Cool. gut zu wissen! – fredoverflow