Когда я создаю std :: вектор объектов, конструктор этих объектов не всегда вызывается.Как вызвать конструктор объектов, содержащихся в 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
...
В этом примере, я вынужден изменить размер вектора, а затем инициализирует его элементы «вручную»?
Может ли причина быть в том, что элементы вектора не инициализируются упорядоченным образом, от первого до последнего, и поэтому я не могу получить детерминированное поведение?
То, что я хотел бы сделать, состоит в том, чтобы легко подсчитать количество объектов, созданных в программе, в разных контейнерах, в разных точках кода и дать каждому из них один идентификатор.
Thank's!
Не принимать ответ, который вы в настоящее время. Это взломать и делает ваш код грязным и непригодным для использования. Копировать-конструктор необходимо скопировать. – GManNickG
Я добавил пример того, как вы можете получить результаты, которые вы ищете _ в этом случае. Тем не менее, вы должны расширить то, что вы хотите достичь, сделав это. Объекты типа создаются и уничтожаются часто (например, когда происходит перераспределение векторов, копируются все объекты в векторе). –
Если вы осветите свои цели, мы будем рады предоставить вам безопасное рабочее решение. Но в его нынешнем виде ваши цели противоречивы: вы не можете различать каждый объект, размещая эти объекты в стандартных контейнерах. – GManNickG