2012-12-07 14 views
5

Eventuali duplicati:
What is the scope of a while and for loop?Qual è la durata e l'ambito della variabile di loop inclusa?

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

Sarà il costruttore e distruttore di oggetto cm essere chiamati a ogni passaggio attraverso il ciclo?

In tal caso, il distruttore verrà chiamato prima o dopo l'incremento della variabile di ciclo?

+0

@ bames53 Il link non risponde se la variabile è distrutta prima o dopo l'incremento. –

risposta

5

La vita dell'oggetto è all'interno di quelle parentesi graffe.

Il costruttore predefinito viene chiamato sulla riga 3 del codice. Il distruttore verrebbe chiamato quando si arriva al}. Quindi il tuo ciclo viene incrementato, quindi il condizionale viene controllato. Se restituisce true, viene creato un altro oggetto (e chiamato il costruttore).

8

Sì. E il distruttore viene chiamato prima dell'incremento. Lo so, risposta breve, ma è tutto.

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; 
    } 
} 

Risultato:

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

Wow! Alcuni trucchetti per imparare dal tuo codice dimostrativo! – pfabri

Problemi correlati