オブジェクトの std::vector を作成するとき、これらのオブジェクトのコンストラクターが常に呼び出されるとは限りません。
#include <iostream>
#include <vector>
using namespace std;
struct C {
int id;
static int n;
C() { id = n++; } // not called
// C() { id = 3; } // ok, called
};
int C::n = 0;
int main()
{
vector<C> vc;
vc.resize(10);
cout << "C::n = " << C::n << endl;
for(int i = 0; i < vc.size(); ++i)
cout << i << ": " << vc[i].id << endl;
}
これは私が得る出力です:
C::n = 1
0: 0
1: 0
2: 0
...
これは私が望むものです:
C::n = 10
0: 0
1: 1
2: 2
...
この例では、ベクターのサイズを変更してから、その要素を「手動で」初期化する必要がありますか?
ベクトルの要素が最初から最後まで順序付けられた方法で初期化されていないため、決定論的な動作を取得できないことが理由でしょうか?
私がやりたいことは、プログラム内、さまざまなコンテナー、コードのさまざまなポイントで作成されたオブジェクトの数を簡単に数え、それぞれに単一の ID を与えることです。
ありがとう!