C++如何在不调用构造函数的情况下分配对象

tro*_*ong 2 c++ constructor unordered-map

我有一节课:

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
Run Code Online (Sandbox Code Playgroud)

这符合我的预期: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;
Run Code Online (Sandbox Code Playgroud)

如何将c,d和e分配给map并仍使static int增加1?

J. *_*ond 5

问题来自你的地图.当您访问map [0]时,映射将查找条目0,如果它不存在,将实例化它并返回对新实例的引用.请尝试使用map.emplace(0, c)在地图中添加项目.