Когда я создаю объект 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
...
В этом примере я вынужден изменить размер вектора и затем инициализировать его элементы "вручную"?
Может ли причина быть в том, что элементы вектора не инициализируются упорядоченным образом, от первого до последнего, и поэтому я не могу получить детерминированное поведение?
То, что я хотел бы сделать, состоит в том, чтобы легко подсчитать количество объектов, созданных в программе, в разных контейнерах, в разных точках кода и дать каждому из них один идентификатор.
Спасибо в!