B
Ich habe mehrere Kritikpunkte, zuerst ernsterer Natur:
die Funktion rein hat keinen Rückgabetyp. Meines Wissens ist implizit-int in C++ nicht erlaubt. Wie wärs mit void?
Wenn du ein Array mit new anforderst, musst du es mit delete[] wieder freigeben. (das betrifft alle 3 Vorkommen von delete bei dir)
mit memcpy kannst du nur POD-Typen (plain old data) kopieren, d.h. im wesentlichen primitive Datentypen und structs aus primitiven Datentypen. Klassen mit Konstruktoren usw. können nicht sicher mit memcpy kopiert werden, da memcpy einfach den Speicher kopiert und nicht den Kopierkonstruktor bzw. Zuweisungsoperator aufruft. Entweder von Hand kopieren, oder den copy-Algorithmus oder den unintialized_copy-Algorithmus, je nachdem.
Stilsachen:
ungünstige Formatierung. Ich musste deinen Quältext erst in einen Editor pasten und umformatieren
unverständliche Namensgebung
2a) btw die Stack-Operationen heißen normalerweise push und pop. beof assoziiert mit end of file, nenn die lieber empty.
komische Rückgabe wenn bei raus der Stack leer ist. Zum einen kann es sein, dass es Typ nicht implizit aus 0 konstruiert werden kann, zum anderen ist 0 ein ganz normaler Wert, den man vorher mit rein() auf den Stack gepackt haben könnte. Hier bieten sich Exceptions an.
bei jedem rein-Aufruf alles umzukopieren ist extrem verschwenderisch mit der Rechenzeit. Es bietet sich an, bei einer notwendigen Vergrößerung gleich etwas mehr zu allozieren, beispielsweise die Größe zu verdoppeln, und dann den ungenutzten Platz aufzufüllen, bis eine neue Vergrößerung ansteht.
alles 2mal umzukopieren ist ebenfalls nicht sehr elegant. Es würde doch reichen, wenn du neuen Platz anforderst, dann die Objekte kopierst, dann delete[] sta, und dann sta = das eben allozierte.
Zur Exceptionsicherheit sag ich jetzt mal nix. Wenn dich das interessiert, nimm mal Exceptional C++ zur Hand. Da wird in einem Kapitel das Design einer Stack-Klasse im Detail mit besonderem Augenmerk auf Exceptionsicherheit durchexerziert.