std::stack - delete und pop in einem Zug



  • Hallo miteinander,

    ich nutze in meinem Programm einen Stack der Form std::stack<void *> . Nun bietet die Klasse keine Funktion um gleichzeitig das oberste Element vom Stack zu nehmen und gleichzeitig freizugeben, falls es denn ein Pointer ist. Gibt es eine Möglichkeit die Stack-Klasse zu erweitern mit einer Methode wie z.B.:

    void freepop(std::stack<void *> *stack) {
        delete stack->top();
        stack->pop();
    }
    

    oder so in der Richtung? Sollte ich eine eigene Klasse schreiben, die von std::stack erbt und dann einfach die passende Methode einbinden? (JA ich weiß, dass die Methode failen würde, wenn der Stack dann keine Pointer als Elemente besitzt!)

    Gruß


  • Mod

    Die Standardklassen sind nicht dafür ausgelegt, dass von ihnen geerbt wird, zumindest nicht wenn du das Ergebnis später über Basisklassenzeiger ansprechen möchtest.

    Guck dir mal die Pointercontainer von boost an, die machen das was du willst.

    Un überdenke nochmal dein Design. void* in C++ sind verdächtig.



  • Christian Ivicevic schrieb:

    void freepop(std::stack<void *> *stack) {
        delete stack->top();
        stack->pop();
    }
    

    Ja, genau so als freie Methode. Ja nicht von std::stack erben.

    Aber void* deleten ist undefiniertes Verhalten. Nimm typisierte oder noch besser gar keine Zeiger.



  • oder wenn zeiger dann smarte zeiger...



  • Oder Du speicherst einen passenden deleter mit im Stack.


Anmelden zum Antworten