Hi Ludwig, Ludwig Fromke schrieb am 22.11.2005 15:14:
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.
Du gehst schonmal den richtigen Weg. Man lernt nur, wenn man sich auch traut zu fragen und selbst Fehler zu machen. - Unerlässlich ist aber in jedem Fall ein _gutes_ C++-Buch (damit meine ich nicht "C++ in 21 Tagen"). C++ ist wirklich nicht mein Spezialgebiet, aber ich denke, dass ich die Konzepte verstanden habe. Also werde ich mal versuchen, deine Fragen zu beantworten. Von QT habe ich allerdings keinen blassen Schimmer...
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)
Vorausgesetzt, dass es diesen Default-Konstruktor gibt, sieht es gut aus.
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?)
Naja, ein bisschen mehr Unterschiede gibt es da schon: Solche Objekte werden nicht auf dem HEAP, sondern auf dem Stack erzeugt. - Sie werden entsorgt (mit dem Destruktor), sobald ihr Gültigkeitsbereich verlassen wird. - Der Gültigkeitsbereich hängt davon ab, wo sie deklariert wurden. Es kann auch eine Funktion sein.
(Wie ist das eigentlich mit Variablen die ich im Konstruktor definiere? Wann sterben die?)
Wenn sie erst im Konstruktor deklariert werden, dann sterben sie, sobald der Konstruktor abgearbeitet wurde. - Sind es Eigenschaften des Objekts, die nur im Konstruktor definiert werden, dann sterben sie, wenn das Objekt zerstört wird.
Die Frage ist nun wie ich einen QSqlCursor richtig töte?
Kommt darauf an, wie du ihn erzeugst. Ob und warum man ihn selbst entsorgen muss, selbst wenn er auf dem Stack angelegt wird, weiß ich mangels QT-Kenntnis nicht. Ist QT OpenSource? Dann schau doch einfach mal in die Quellen des QSQLCursors und versuche, einen Grund zu finde, warum der Cursor nicht automatisch entsorgt werden kann.
Und gibt es noch mehr solche Qt-Objekte die ich selber töten muss?
Weiß ich nicht.
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.
Den Segfault kann ich dir auch nicht erklären. Gruß, Michael