2012-12-07 16 views
5

可能性の重複:オブジェクトセンチのコンストラクタとデストラクタは、ループを通過するごとに
What is the scope of a while and for loop?囲まれたループ変数の有効期間と有効期間はどのくらいですか?

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

と呼ばれますか?

もしそうなら、ループ変数がインクリメントされる前または後にデストラクタが呼び出されますか?

+0

は、変数は前または増分後に破壊されているかどうかを答えていません。 –

答えて

5

オブジェクトの寿命は中括弧の内側です。

デフォルトのコンストラクタは、コードの3行目で呼び出されます。デストラクタはあなたが}に行くときに呼び出されます。その後、ループがインクリメントされ、条件がチェックされます。 trueを返すと、別のオブジェクトが作成されます(コンストラクタが呼び出されます)。

8

はい。デストラクタはインクリメントの前に呼び出されます。私は知っている、短い答えですが、それはそれです。

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

結果:bames53あなたのリンク@

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

うわー!あなたのデモンストレーションコードから学ぶための素敵なトリック! – pfabri

関連する問題