Problem in eigener Klasse
-
Hi

class MyList{ public: MyList(int XLeft, int YTop, int Size, TForm * ThaForm, MyList * Sender ); ~MyList(); MyList ( MyList & rhs ){} bool Add( int XLeft, int YTop, int Size, TForm * ThaForm ); bool AddSimple(); MyList* GetNext(); MyList* GetPrevious(); void EraseRow(); private: void ErasePrevious(MyList* NextInRow); void EraseNext(MyList* NextInRow); TForm * Form; FallingObject * Object; MyList * Next; MyList * Previous; }; MyList::MyList(int XLeft, int YTop, int Size, TForm * ThaForm, MyList * Sender ): Previous(Sender),Form(ThaForm),Next(NULL){ Object = new FallingObject(XLeft,YTop,Size,NULL,NULL,Form,NONE,"",NULL); } bool MyList::AddSimple(){ if ( Next ){ Next->Add(Object->GetX(), Object->GetY(), Object->itsSize, Form); }else{ Next = new MyList(Object->GetX(),Object->GetY(),Object->itsSize,Form,this); } } bool MyList::Add( int XLeft, int YTop, int Size, TForm * ThaForm ){ if ( Next ){ Next->Add(XLeft, YTop, Size, ThaForm); }else{ Next = new MyList(XLeft,YTop,Size,ThaForm,this); } } MyList* MyList::GetNext(){ if ( Next )return Next; } MyList* MyList::GetPrevious(){ if ( Previous )return Previous; } void MyList::ErasePrevious( MyList * NextInRow ){ if ( NextInRow->Previous )ErasePrevious(NextInRow->Previous); delete NextInRow->Previous; NextInRow->Previous = NULL; } void MyList::EraseNext( MyList * NextInRow ){ if ( NextInRow->Next )EraseNext(NextInRow->Next); delete NextInRow->Next; NextInRow->Next = NULL; } void MyList::EraseRow(){ if ( Previous ){ ErasePrevious(Previous); delete Previous; Previous = NULL; } if ( Next ){ EraseNext(Next); delete Next; Next = NULL; } } MyList::~MyList(){ delete Object; Object = NULL; }also mein problem ist das wenn ich add simple aufrufe eigentlich alles klappt wie ich es will. aber als letztes ( nachdem er den kontruktor von MyList durchgearbeitet hat ) ruft er gleich wieder den dekonstruktor auf, und ich seh den fehler ürgentwie nicht ^^'' könntet ihr mir da helfen?
EDIT: ... habs gesehen.. dadurch das das hier so schön klein geschrieben is .. ( hat man ne nette übersicht, ich will das forum als compiler :< )
-
Ich sehe hier nirgends, dass der Konstruktor aufgerufen wird. Also wird es schwer den Fehler zu finden. Ich würde mal darauf tippen, dass das Programm einfach gleich wieder zu Ende ist..
btw:
Das mit dem deleten klappt so nicht, gibt Memoryleaks.
-
warum nicht? wenn ich bei jedem in der liste den dekonstruktor aufrufe und vll. nen paar versuchen nen null pointer zu löschen ... wo sind da die leaks ^^?
-
Dat Ding heißt übrigens Destruktor und
delete Object, Next, Previous;wird wahrscheinlich nicht das tun, was du beabsichtigst.
-
und was wird es tun?
-
Schurke schrieb:
und was wird es tun?
Das Objekt, auf dass Previous zeigt, versuchen zu löschen und sonst nichts. Sieht nicht so aus, als ob Previous überhaupt initialisiert wird...
-
wird es schon ( hatte das vorhin auch gesehen das es mit dem kon. ohne sender nicht klappt ^^ )
MyList::MyList(int XLeft, int YTop, int Size, TForm * ThaForm, MyList * Sender ): Previous(Sender),Form(ThaForm),Next(NULL){//<--- Object = new FallingObject(XLeft,YTop,Size,NULL,NULL,Form,NONE,"",NULL); }
-
camper wollte darauf hindeuten, dass
delete Object, Next, Previous;äquivalent zu
Object; Next; delete Previousist.
Es wird also nur Previus gelöscht.
Gruß
Don06