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

标签 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

结果如我所料: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/

相关文章:

c++ - unordered_map 使用不当或错误?

c++ - 访问结构数组中的 std::unordered_map 时出现浮点错误

c++ - 使用Unordered_map C++的字符串中的第一个唯一字符

c++ - VS2017 中导出的项目模板丢失源文件

c++ std for_each 稍后定义 std 函数

c++ - 如何更改另一个进程的内存空间中的值

c++ - 我的射线三角形交叉点代码正确吗?

c# - 在其构造函数中使用类 C# - 有味道吗?

haskell - 在 Haskell 中如何将构造函数作为参数传递并对其进行匹配

java - java 构造函数中的 if/else 语句