[c++] ctor von listen

Online-Skater

Erfahrenes Mitglied
Hallo ich hab ein Problem mit dem Copy-Constructor des Stacks, aber man kann wohl allgemein fragen wie man einen solchen erstellt. Ich habe eine Version programmiert die eigentlich nicht funktioniert, da wenn man einen Stack kopiert (stack1 = stack2) und dann stack2 leert, stack1 verrückt spielt in Form von Unsinn der über den Bildschirm fegt.

C++:
//Klasse
struct ELEM
{
	  int Value;
	  ELEM *prev;
};

class Stack
{
	usint length;
	ELEM *first;
  public:
	Stack();
	Stack(const Stack &s);
	bool is_empty();
	void empty();
	void push(int Value);
	bool pop(int &Value);
	void show();
};
// Stack is empty ?
inline bool Stack::is_empty()
{
  return length==0;
}

// Copy ctor
Stack::Stack(const Stack &s)
:length(0), first(0)
{
    ELEM *puffer;
    puffer = s.first;
    while(puffer->prev != 0)
    {
        push(puffer->Value);
        puffer = puffer->prev;
    }
}

// Insert an Elem into the Stack
void Stack::push(int Value)
{
  ELEM *E = new ELEM;
  E->Value = Value;
  ELEM *puffer;
  puffer = this->first;
  this->first = E;
  this->first->prev = puffer;
  this->length++;
}

// Delete all Elems in Stack
void Stack::empty()
{
  if (!is_empty())
  {
	ELEM *puffer;
	while(this->length != 0)
	{
	  puffer = this->first;
	  this->first = this->first->prev;
	  delete puffer;
	  this->length--;
	}
  }
}
Denke das sind die Schnipsel die ausschlaggebend sind. Ich kopiere einen Stack, lösche den alten (empty()) und gebe dann den kopierten aus und erhalte Müll :rolleyes:
Ich weiß nicht was an meiner Variante falsch ist und ich weiß das es mit den Zeigern Probleme gibt und ich da was zerschossen hab oder so ähnlich :confused:

Vielen Dank für euer Bemühen.
 
Hups du hast Recht ich habe den Datentyp davor vergessen... Dann wird der Copy-Konstruktor aufgerufen. Ok dann hat sich das ja erledigt ich sehe aber gerade das ich falsch herum kopiert habe aber das bekomm ich bestimmt noch hin :)

Danke deepi ;-)
 
Zurück