当我创建对象的 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。
谢谢!