Hey, du sprichst genau mein grösstes Rätsel an. Wie arbeiten Profis mit C/C++ Bibliotheken? Ohne perfekte Doku kann man ja nie sagen, wann welches Objekt noch lebt, bzw. wie lange ein zurückgegebener Zeiger noch auf reservierten Speicher zeigt. Generell denke ich, dass es folgendermaßen ist: Alle "normalen" Variablen werden auf dem Stack angelegt und gelten exakt so lange wie die äusseren { } - Klammern darum sind. Gibt es da Ausnahmen? Alle new Speicherbereiche werden auf dem Heap angelegt und sind daher bis zum delete erreichbar (solange man nicht die Adresse verschlampt). Von daher ist Dein Cursor (ich hab keine Ahnung von QT) wenn er so deklariert wird: QSqlCursor cur( "prices" ); am Ende auch wieder tot. Automatisch. Was allerdings sein kann ist, dass das QSqlCursor Objekt Speicher allokiert, der nicht in dessen Destructor gelöscht wird. Warum das so ist und was es in Deinem Fall ist weiss ich nicht. Wegen dem Constructor: Lokale Variablen die im Constructor deklariert werden sind nach dem Constructor wieder weg. Um sie während der kompletten Existenz des Objekts zur Verfügung zu haben kommen die dann in die Klassendefinition. Im Konstruktor findet dann die Initialisierung dergleichen statt. Falls ich irgendwo quatsch erzähle bitte korrigieren. gruß Marcel Ludwig Fromke wrote:
Hallo Liste
Ich muß vorausschicken das ich gerade meine ersten Gehversuche mit Qt und C++ unter Suse Linux 9.3 mache. Die vorangegangene Diskusion (frage zu Objekten in c++) hat mir viel geholfen. Jetzt fehlt mir nur noch etwas zum richtigen Verständnis der Materie. In der Doku von QT unter QSqlCursor habe ich etwas gefunden was nicht richtig verstehe. (liegt wohl auch an meinen schlechten Englisch) Da steht das QT den Cursor nicht automatisch löscht sondern ich dafür verantwortlich bin. Ich stelle mir das jetzt einfach mal so vor: QSqlCursor *cursor = new QSqlCursor; delete cursor; (Hoffentlich stimmt das so)
Aber selbst in den Beispielen von Qt finde ich immer nur sowas: QSqlCursor cur( "prices" ); Eigentlich habe ich gedacht das sich solche Variablen von selbst töten wenn die Funktion beendet wird. (Stimmt das?) (Wie ist das eigentlich mit Variablen die ich im Konstruktor definiere? Wann sterben die?)
Die Frage ist nun wie ich einen QSqlCursor richtig töte? Und gibt es noch mehr solche Qt-Objekte die ich selber töten muss?
Da ich immer wieder bei meinen Dialogen, die viel mit SQL arbeiten, das Problem habe das beim zweiten Start ein SegFault kommt wäre ich für etwas Hilfe sehr dankbar.