c++ - 如何在没有复制构造函数的情况下为 map 设置值?

标签 c++ dictionary copy-constructor

必须将不可复制类的实例填充到 map 中。例如这段代码:

#include <map>

class NoCopyClass
{
    public:
        NoCopyClass() {};
        NoCopyClass(int value)  {};

        NoCopyClass& operator=(const NoCopyClass&) = delete;

};

int main()
{
    std::map<int, NoCopyClass> my_map;
    my_map[3] = NoCopyClass(20);
}

除非你注释掉复制构造函数的删除,否则编译失败。 您可以在这里试用:https://onlinegdb.com/ByBh0NubU

当类不可复制时,添加新 map 元素的正确方法是什么?

非常感谢!

最佳答案

尝试使用emplace()就地构造对象而不是复制已经构造的对象:

int main()
{
    std::map<int, NoCopyClass> my_map;
    my_map.emplace(3, 20);
}

关于c++ - 如何在没有复制构造函数的情况下为 map 设置值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59894042/

相关文章:

python - 为什么函数将错误的值附加到列表中?

android - 如何在Android map 上更改位置时删除标记并重新绘制它

python - 在 python 字典中收集相同的 key (仅通过 key 的第一部分)?

c++ - 运算符(==)重载错误

c++ - 使用函数地址的模板类的唯一数字 ID

c++ - 如何在 C++ 中将字符串作为 shell 脚本执行?

c++ - 没有匹配的初始化构造函数

c++ - 编写二次公式程序时的编译错误

c++ - 在复制赋值运算符中分配基类成员

c++ - 编译器何时在 C++ 中创建复制构造函数?