2012-12-07 12 views
5

Mögliche Duplizieren:
What is the scope of a while and for loop?Was ist die Lebensdauer und der Umfang der eingeschlossenen Schleifenvariable?

for (int32 segNo = 0; segNo < 10; ++segNo) 
{ 
    my_Object cm; 
} 

Wird der Konstruktor und Destruktor des Objekts cm auf jeder durch die Schleife genannt werden?

Wenn ja, wird der Destruktor vor oder nach dem Inkrementieren der Schleifenvariable aufgerufen?

+0

@ bames53 Ihr Link nicht beantworten, ob die Variable vor oder nach der Erhöhung zerstört wird. –

Antwort

5

Die Lebensdauer des Objekts ist innerhalb dieser geschweiften Klammern.

Der Standardkonstruktor wird in Zeile 3 Ihres Codes aufgerufen. Der Destruktor würde aufgerufen werden, wenn Sie zu} gelangen. Dann wird Ihre Schleife inkrementiert, dann wird die Bedingung überprüft. Wenn es wahr zurückgibt, wird ein anderes Objekt erstellt (und der Konstruktor aufgerufen).

8

Ja. Und der Destruktor wird vor dem Inkrement aufgerufen. Ich weiß, kurze Antwort, aber das war's.

6
#include <iostream> 
struct Int { 
    int x; 
    Int(int value):x(value){} 
    bool operator<(int y)const{return x<y;} 
    void increment() { std::cout << "incremented to " << ++x << "\n";} 
}; 
struct Log { 
    Log() { std::cout << "Log created\n";} 
    ~Log() { std::cout << "Log destroyed\n";} 
}; 

int main() 
{ 
    for(Int i=0; i<3; i.increment()) 
    { 
     Log test; 
    } 
} 

Ergebnis:

Log created 
Log destroyed 
incremented to 1 
Log created 
Log destroyed 
incremented to 2 
Log created 
Log destroyed 
incremented to 3 
+0

Wow! Einige nette Tricks, um von Ihrem Demo-Code zu lernen! – pfabri

Verwandte Themen