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::stackerbt 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ß
-
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::stackerben.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.