我有一个类:
class C {
public:
C(): _a(a++){}
private:
static int a;
int _a;
};
int C::a = 0;
C c = C(); // c._a is 0
C d = C(); // d._a is 1
C e = C(); // e._a is 2
结果如我所料:a 和 obj._a 递增 1。但是如果我将 c、d 和 e 分配给 unordered_map,它们递增 2:
unordered_map<int, C> map;
C c = C(); // c._a is 0
map[0] = c;
C d = C(); // d._a is 2
map[1] = d;
C e = C(); // e._a is 4
map[2] = e;
如何将 c、d 和 e 赋值给 map 并仍然使静态 int 递增 1?
最佳答案
问题出在您的 map 上。当您访问 map[0] 时, map 将查找条目 0,如果它不存在,将实例化它并返回给您对新实例的引用。
尝试使用 map.emplace(0, c)
在您的 map 中添加项目。
关于C++如何在不调用构造函数的情况下分配对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37743766/