====================================== Klassen mit dynamische Datenstrukturen [TOC] ====================================== Etwas komplizierter wird es, wenn Objekte bzw. deren Klassen dynamische Datenstrukturen unterhalten. Es lohnt sich, dies zuerst an einer trivialen Stack-Implementierung anzusehen. Gegeben sei folgende Klasse _IntegerStack_ mit der Hilfsklasse _IntegerMember_, bei der momentan noch die Kopierkonstruktoren und Zuweisungsoperatoren fehlen: :import: session02/simple-stack.cpp Wenn Sie diese Fassung ausprobieren, scheint es zunächst zu klappen: ---- SHELL (path=session02,hostname=heim) ---------------- g++-8.3 -Wall -g -o simple-stack simple-stack.cpp ./simple-stack valgrind ./simple-stack ---------------------------------------------------------- Anders sieht es aber aus, wenn die vom Übersetzer gelieferten Kopierkonstruktor und Zuweisungsoperatoren zum Einsatz kommen: ---- SHELL (path=session02,hostname=heim) ---------------- diff -U 2 simple-stack.cpp simple-stack2.cpp g++-8.3 -Wall -g -o simple-stack2 simple-stack2.cpp valgrind ./simple-stack2 ---------------------------------------------------------- Frage ===== Wozu ist die Anweisung `old->next = nullptr;` notwendig in der Methode _pop_ der Klasse _IntegerStack_? Aufgabe ======= Ergänzen Sie die obige Fassung mit Kopierkonstruktoren und Zuweisungsoperatoren, so dass alles ordnungsgemäß läuft und _valgrind_ keine Fehler liefert. Machen Sie sich dabei das Leben so einfach wie möglich. Schleifen werden keine benötigt, da sich alles rekursiv erledigen lässt. :navigate: up -> doc:index back -> doc:session02/page06 next -> doc:session02/page08