重複の可能性:
while および for ループの範囲は?
for (int32 segNo = 0; segNo < 10; ++segNo)
{
my_Object cm;
}
オブジェクト cm のコンストラクタとデストラクタは、ループを通過するたびに呼び出されますか?
もしそうなら、ループ変数がインクリメントされる前または後にデストラクタが呼び出されますか?
重複の可能性:
while および for ループの範囲は?
for (int32 segNo = 0; segNo < 10; ++segNo)
{
my_Object cm;
}
オブジェクト cm のコンストラクタとデストラクタは、ループを通過するたびに呼び出されますか?
もしそうなら、ループ変数がインクリメントされる前または後にデストラクタが呼び出されますか?
はい。そして、インクリメントの前にデストラクタが呼び出されます。短い答えですが、それだけです。
#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;
}
}
結果:
Log created
Log destroyed
incremented to 1
Log created
Log destroyed
incremented to 2
Log created
Log destroyed
incremented to 3
オブジェクトの寿命はこれらの中括弧の中にあります。
デフォルトのコンストラクターは、コードの 3 行目で呼び出されます。} に到達すると、デストラクタが呼び出されます。次に、ループがインクリメントされ、条件がチェックされます。true を返す場合、別のオブジェクトが作成されます (そしてコンストラクターが呼び出されます)。