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