Wie lösche ich eine Klasse?
-
ich habe es jetzt so gelöst:
public: int del();Methode
int kettenglied::del(){ kettenglied * temp = this->next; kettenglied * temp2 = this->back; if (this->next == NULL){ temp2->next = NULL; return 0; } if (this->back == NULL){ temp->back = NULL; return 0 ; } delete this; temp->back = temp2; temp2->next = temp; return 0; }Löschen Button
aktuell->del(); return;
-
Hmm, das sieht aber verdammt nach std::list aus. Hat das einen Grund, dass du die nicht nutzt?
-
David_ schrieb:
int kettenglied::del(){ ... delete this; ...Also DAS sollte doch wohl immer schieflaufen, oder ?
IIRC kann ein Objekt keinen "Selbstmord begehen"....Gruß,
Simon2.
-
Das geht schon. Man darf nur nach dem delete nicht mehr auf irgendwelche Member der Klasse zugreifen. Ich finde das nur irgendwie unschön.

-
@David: Hast du schonmal etwas von "Destruktoren" gehört?
-
Braunstein schrieb:
...Ich finde das nur irgendwie unschön.

Seeeeehr diplomatisch ausgedrückt.

Gruß,
Simon2.
-
David_ schrieb:
...
Mir scheint, Du hast da noch einen Denk-/Designfehler drin: Du hast zwei eigene "Einheiten": Die "Kettenglieder" und die "Kette als Ganzes".
Es ist nicht die Aufgabe eines Kettengliedes, sich zu löschen oder zu erzeugen, sondern einfach nur "da zu sein". Die "Kette als Ganzes" ist für die Verwaltung der einzelnen Glieder zuständig ... sie erzeugt, löscht, hängt um, gibt aus, .... .
Zumindestens würde ich das so implementieren (also 2 Klassen).
Noch eher: Ich würde mit eine std::list<FachDaten> hernehmen, die das alles für mich macht (inkl. der previous-/next-Verbindungen).Gruß,
Simon2.
P.S.: Du solltest Deinen Threadtitel mal ändern, denn "Klassen löschen" macht man mit der IDE auf der Festplatte.... und das ist wohl nicht das, was Du willst. Du möchtest "Objekte aus einer Liste entfernen".

-
Also soweit ich weiss, muss man nicht zwingend eine Methode zum loeschen einer Klasse spendieren. Man kann auch einfach die Klasse allokieren:
Class *Object = new Class;und spaeter, wenn sie nicht mehr gebraucht wird mit:
delete Object;wieder loeschen.
Der Zugriff erfolgt dann ueber:
Object->Method();
-
LMwoot schrieb:
Also soweit ich weiss, muss man nicht zwingend eine Methode zum loeschen einer Klasse spendieren. ...
Ich würde sogar sagen: Eine solche Funktion bringt mehr Probleme als Vorteile (gaaanz spezielle Designpatterns mal ausgenommen).
Was Du beschreibst, ist richtig ... und zeigt mE auch den richtigen Weg: Von Außen wird das Objekt erzeugt (mit new), genutzt und gelöscht (delete)...
Gruß,
Simon2.
-
Ihr mögt alle recht haben

Nur meine version funktioniert einwandfrei *duck*
Für eure genannten beispiele bin ich wohl noch nicht weit genug in der materie der Sprache c++

Gruß
David
-
Die funktioniert genau solange einwandfrei, bis der erste Fehler kommt

-
David_ schrieb:
Ihr mögt alle recht haben

Nur meine version funktioniert einwandfrei *duck*...
Was war denn dann Deine Frage ?

Gruß,
Simon2.
-
David_ schrieb:
Ihr mögt alle recht haben

Nur meine version funktioniert einwandfrei *duck*
Für eure genannten beispiele bin ich wohl noch nicht weit genug in der materie der Sprache c++

Gruß
DavidWenn Du es nicht schaffst diese Einstellung zu überwinden wirst Du imemr nur ein mittelmässiger Programmierer bleiben.
Du hast (richtig) erkannt das Du etwas nicht begriffen hast (delete sache). Die Leute hier haben Dir einige gute Denkansätze gegeben. Der richtige Weg wäre es jetzt sich hinzusetzen und diese Denkansätze solange zu bearbeiten bis Du begreifst was damit gemeint ist. der absolut falsche Weg ist es mit solche Argumenten andere ideen zu blocken und mit der eigenen (schlechten) weiterzumachen, nur "weil sie doch funktioniert". dabei behaupte ich jetzt mal ganz frech das Dir einfach das tiefergehende Verständnis fehlt um tatsächlich beurteilen zu können ob Deine variante tatsächliche "einwandtfrei funktioniert" oder nicht in Wirklichkeit einfach nur "zufällig funktioniert".
Allzu viele Programmierer geben sich leider mit letzterem Zufrieden...