delete function



  • Hallo,

    ich habe häufiger den Fall, dass ich (z. B. im Detruktor) alle Heap-Objekte in einem std::vector etc. löschen möchte.

    Gibt es in der STL oder in boost eine delete-Funktion, so dass ich std::for_each nutzen kann?

    std::for_each(myList.begin(); myList.end(); &deleteObject);
    

    Also ein Äquivalent zu:

    template<typename T>
    	void deleteObject(const T* t){
    		delete t;
    	}
    

    Klar ist es kein Problem eine zu schreiben, aber wieso doppelt, falls sie schon vorhanden sein sollte?

    Gruß,
    MaPoX


  • Mod

    boost pointer container



  • MaPoX schrieb:

    ich habe häufiger den Fall, dass ich (z. B. im Detruktor) alle Heap-Objekte in einem std::vector etc. löschen möchte.

    Vermeide doch einfach diese Situationen. Wenn Du das Gefühl hast, Du müsstest Destruktoren vieler Klassen selbst schreiben, machst Du Design-technisch wahrscheinlich etwas falsch.



  • SeppJ schrieb:

    boost pointer container

    Diese Anwort soll mir sagen, dass ich lieber über die Verwendung von std::vector etc. nachdenken sollte und die Ersetzung durch boost pointer container in Betracht ziehen soll?



  • krümelkacker schrieb:

    MaPoX schrieb:

    ich habe häufiger den Fall, dass ich (z. B. im Detruktor) alle Heap-Objekte in einem std::vector etc. löschen möchte.

    Vermeide doch einfach diese Situationen. Wenn Du das Gefühl hast, Du müsstest Destruktoren vieler Klassen selbst schreiben, machst Du Design-technisch wahrscheinlich etwas falsch.

    Eigentlich muss ich fast nie Destruktoren schreiben außer in diesen Fällen, die zugegeben doch relativ häufig sind, wobei ich nun wohl mal die boost pointer container verwenden könnte/sollte

    thx euch beiden



  • Alternativ kannst du auch einen vector<unique_ptr<T>> verwenden, falls dir unique_ptr zur Verfügung steht.



  • 314159265358979 schrieb:

    Alternativ kannst du auch einen vector<unique_ptr<T>> verwenden, falls dir unique_ptr zur Verfügung steht.

    Danke für den Hinweis!

    Hab ich auch teilweise schon.


Anmelden zum Antworten