PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verschiedene Fragen zum Thema "delete"



Kirsche
01-10-2005, 11:27
Hallo Leute,

damit man keine Speicherlecks produziert, muss man ja - allgemein gesagt - alles mit "delete" löschen, was man mit "new" angelegt hat. Dazu habe ich ein paar Fragen:

1. Bei Qt gilt doch, dass man nichts selber löschen muss, was einen "parent" hat, oder habe ich das falsch verstanden?

2. Wenn ich eine Liste löschen möchte ( die ja kein "parent" hat), reicht dann "setAutoDelete" zusammen mit "clear" im Destruktor der Klasse, in der sich die Liste befindet? Oder was muss ich da machen? Meine Liste ist ja kein Zeiger, aber die Elemente darin.

3. Wie lösche ich Listen innerhalb von Listen? Ich produziere immer einen Absturz, wenn ich "autodelete" und "clear" benutze.

4. Wenn ich Elemente irgendwo erzeuge und später in eine Liste stecke, wo muss ich diese dann löschen? Es könnte ja sein, dass ich die Liste irgendwann nicht mehr brauche, die Elemente aber schon.

5. Wie löscht man Arrays, die man mit char* c = new char[length] erzeugt hat? Einfach mit "delete c" ?

6. Muss man connections, die nicht mehr benutzt werden, selber löschen, also ein disconnect machen?

7. Muss ich sonst noch irgenwas beachten?

Vielen Dank

peschmae
01-10-2005, 14:44
5. Wie löscht man Arrays, die man mit char* c = new char[length] erzeugt hat? Einfach mit "delete c" ?

delete[] c;



6. Muss man connections, die nicht mehr benutzt werden, selber löschen, also ein disconnect machen?

Nein.



7. Muss ich sonst noch irgenwas beachten?


Äh ja. Hier kommt jetzt ein Bücherregal hin ;)

MfG Peschmä

anda_skoa
01-10-2005, 15:56
1. Bei Qt gilt doch, dass man nichts selber löschen muss, was einen "parent" hat, oder habe ich das falsch verstanden?

Korrekt, gilt für alle QObject Subklassen.



2. Wenn ich eine Liste löschen möchte ( die ja kein "parent" hat), reicht dann "setAutoDelete" zusammen mit "clear" im Destruktor der Klasse, in der sich die Liste befindet? Oder was muss ich da machen? Meine Liste ist ja kein Zeiger, aber die Elemente darin.

Ansich reicht das setAutoDelete(true), denn das clear wird im Destruktor von QPtrList aufgerufen.



3. Wie lösche ich Listen innerhalb von Listen? Ich produziere immer einen Absturz, wenn ich "autodelete" und "clear" benutze.

Möglicherweise ist ein Element in mehr als einer der Listen, oder etwas ähnliches,
Ansich sollte es funktionieren, alles Listen auf autodelete zu setzen und dann die Hauptliste zu löschen.



4. Wenn ich Elemente irgendwo erzeuge und später in eine Liste stecke, wo muss ich diese dann löschen? Es könnte ja sein, dass ich die Liste irgendwann nicht mehr brauche, die Elemente aber schon.

Das kann man nicht allgemein beantworten, das hängt von der Programmlogik ab.


6. Muss man connections, die nicht mehr benutzt werden, selber löschen, also ein disconnect machen?

Wenn die beiden Objekte noch existieren ja, sonst nein (wird vom Desktruktor gelöscht)

Ciao,
_

Kirsche
02-10-2005, 10:24
Hallo Leute,

danke für eure Erklärungen. Dann werde ich das mal umsetzen.

Schöne Grüße,