Re: Wie töt e ich QSQLCursor

David Haller <[email protected]>
Newsgroups gmane.linux.suse.programming
Message-ID <[email protected]>
Hallo,

Am Tue, 22 Nov 2005, adsci schrieb:
>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?

Ja. Mit 'static' deklarierte Variablen. Bsp.:

,----[ staticvar.cc ]
| #include <cstdio>
| 
| int foo(void) {
|     static int j = 0;
|     return ++j;
| }
| 
| int bar(void) {
|     int k = 0;
|     return ++k;
| }
| 
| int main(void) {
|     for( register int i = 0; i < 10; ++i ) {
|         printf("foo=%i, bar=%i\n", foo(), bar());
|     }
|     return 0;
| }
`----

Note: Zumindest fuer sowas ziehe ich printf aus <cstdio> dem cout aus
<iostream> deutlich vor...

Aufgabe: fuehre obiges Beispiel jew. eine '{}'-Ebene "tiefer" und
demonstriere dabei den Effekt der zusaetzlichen '{}'.

>Falls ich irgendwo quatsch erzÀhle bitte korrigieren.

s.o.

>Ludwig Fromke wrote:
>>Ich muß vorausschicken das ich gerade meine ersten Gehversuche
>>mit Qt und C++ unter Suse Linux 9.3 mache.
[..]
>>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)

Ja.

Was du mit 'new' anlegst musst du mit 'delete' abraeumen. Deshalb sollten
Variablen wenn moeglich "automatisch" und so lokal wie moeglich sein (wie
das 'k' in bar() oben).

Auch bei "Member"-Variablen von Objekten gilt das uebrigens. Gut ist es,
wenn man die Variablen / Member im Konstruktur nur _initialisieren_, nicht
aber Speicher (per new) allokieren muss.

Anders ausgedrueckt: mit 'new'/'delete' sollte man so umgehen wie mit
'?alloc'/'free' in C.

>>Aber selbst in den Beispielen von Qt finde ich immer nur sowas:
>>	QSqlCursor cur( "prices" );

Auch du solltest dich in die _GRUNDLAGEN_ von C++ einlesen! Insbesondere
auch bzgl. new/delete vs. "automatische" Stack-Variablen.

-dnh

-- 
> "Gah. You know there's people apparently people paying for pr0n feeds
> for their cellphone."                               -- Peter da Silva
"Yeah, I know.  I helped build the infrastructure."   -- Matt McLeod
                                                  [sig courtesy of AdB]

-- 
Um die Liste abzubestellen, schicken Sie eine Mail an:
    [email protected]
Um eine Liste aller verfÃŒgbaren Kommandos zu bekommen, schicken
Sie eine Mail an: [email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.