000
20.02.2006, 13:05 Uhr
~dotcom
Gast
|
hallo zusammen, ich habe ein kleines Programm zum Aufbau eines Stacks. Darin kann eine bestimmte Anzahl an Elementen in einem Array gespeichert werden. Soweit so gut. Mein Problem liegt nun in der korrekten Speicherfreigabe der Objekte, sobald der Stack wieder verschwindet.
Hier das Programm:
C++: |
#include <iostream> #include <cassert> using namespace std;
//Hilfs-Klasse class A { public: A(){cout << "\terstellt" << endl; kopie=0;} A(const A& ref){cout << "\tKopie erstellt" << endl; kopie = 1;} ~A() { if(kopie == 1) cout << "\tKopie entfernt" << endl; else cout << "\tentfernt" << endl; } private: int kopie; };
template<class T> class MeinStack { int SPtr; // Index des obersten Elements T* Array; // Zeiger auf das erste Element int Max; // Anzahl der reservierten Array-Elemente public: MeinStack(int s):SPtr(-1), Max(s){Array = new T[s];} ~MeinStack(); void push(T a); T pop(); bool full(); bool empty(); }; // -- Implementierung ---
template<class T> inline MeinStack<T>::~MeinStack() { delete [] Array; cout << "Array geloescht" << endl; }
template<class T> inline void MeinStack<T>::push(T a) { assert(!full()); Array[SPtr++] = a; }
template <class T> inline T MeinStack<T>::pop() { assert(!empty()); return Array[SPtr--]; }
template<class T> inline bool MeinStack<T>::full() { return (SPtr+1)==Max; }
template<class T> inline bool MeinStack<T>::empty() { return SPtr < 0; }
// --- main-Funktion --- int main() { cout << "Erstelle einen Stack mit fuenf A-Elementen" << endl; MeinStack<A> einStack(5); cout << "Erstelle ein A-Objekt und fuege es dem Stack hinzu" << endl; A einObjekt; // anderes Verhalten... einStack.push(einObjekt); // ...falls auskommentiert cout << "Programm-Ende" << endl; system("Pause"); return 0;
|
Die Ausgabe des Programms:
Code: |
Erstelle einen Stack mit fuenf A-Elementen erstellt erstellt erstellt erstellt erstellt Erstelle ein A-Objekt und fuege es dem Stack hinzu erstellt Kopie erstellt Kopie entfernt Programm-Ende Drücken Sie eine beliebige Taste . . . entfernt entfernt Array geloescht
|
Warum werden nicht alle Elemente des Arrays gelöscht, sondern offenbar nur das, was ich per push(einObjekt) hinzugefügt habe. Entferne ich nämlich die beiden in der main-Methode angegebenen Zeilen oder kommentier sie aus, ist die Ausgabe wie erwartet:
Code: |
Erstelle einen Stack mit fuenf A-Elementen erstellt erstellt erstellt erstellt erstellt Erstelle ein A-Objekt und fuege es dem Stack hinzu Programm-Ende Drücken Sie eine beliebige Taste . . . entfernt entfernt entfernt entfernt entfernt Array geloescht
|
Ich hoffe mir kann das jemand erklären. |