Objekt in for-Schleife; Wann wird der Konstruktor aufgerufen?
-
Hallo zusammen!
...folgender (Pseudo-)Code:
for(int i = 0; i < ANZAHL; i++) { string str; str.assign(...); }Wird nun das Objekt (str) bei jedem Durchgang neu erstellt ? Wenn ja, würde doch der Konstruktor bei jedem Schleifeneingang aufgerufen und bei jedem Schleifenausgang der Destruktor, oder?!
DAnke schonmAl!!!

-
NeedSomeInfo schrieb:
Wird nun das Objekt (str) bei jedem Durchgang neu erstellt ?
jo .
-
Super danke; das heißt ein break bzw continue in der Schleife hätte direkt den (autom.) Aufruf des Destruktors zu Folge, richtig ?
-
ach, sry noch ne Frage:
kann ich damit einen neuen Block/Scope erstellen:{ string str; // str gibt es nur innerhalb der Klammern ?! }Also die Klammern stehen einfach 'so' da; keine Funktion, kein if...; geht das ?
-
der destruktor wird immer aufgerufen wenn das objekt seinen gueltigkeitsbereich verlaesst - sobald der schleifenkopf neu abgefragt wird ist er ausserhalb des blockes und dadurch entsprechend einen destrukt
-
Ja klar und bei der letzten Frage ?
-
NeedSomeInfo schrieb:
Also die Klammern stehen einfach 'so' da; keine Funktion, kein if...; geht das ?
jo
Edit: Bei sowas einfach mal ausprobieren (hilft immer)
-
NeedSomeInfo schrieb:
ach, sry noch ne Frage:
kann ich damit einen neuen Block/Scope erstellen:{ string str; // str gibt es nur innerhalb der Klammern ?! }Also die Klammern stehen einfach 'so' da; keine Funktion, kein if...; geht das ?
jo.
das ist ein recht beliebter trick, um variablen kurzlebiger zu machen.
beispiel:int main(){ int z=0; ifstream in("zahl.txt"); in>>zahl; ++zahl; cout<<"Ich wurde "<<zahl<<" mal aufgerufen.\n"; ofstream out("zahl.txt"); out<<zahl; return 0; }hier kann alles mögliche passieren. es ist generell eine schlechte idee, eine datei gleichzeitig zum lesen und zum schreiben offen zu haben. die schlechte lösung:
int main(){ int z=0; ifstream in("zahl.txt"); in>>zahl; in.close(); ++zahl; cout<<"Ich wurde "<<zahl<<" mal aufgerufen.\n"; ofstream out("zahl.txt"); out<<zahl; out.close(); return 0; }jetzt gehts ganz bestimmt.
die gute lösung:
einfach die objekte frühzeitig sterben lassen.int main(){ int z=0; { ifstream in("zahl.txt"); in>>zahl; } ++zahl; cout<<"Ich wurde "<<zahl<<" mal aufgerufen.\n"; { ofstream out("zahl.txt"); out<<zahl; } return 0; }
-
Jupp, alles klar, vielen Dank!