c++ - 是否可以在 C++ 中将 std::map 与没有任何复制运算符的类一起使用?

标签 c++ constructor copy-constructor stdmap

我正在使用一个没有任何复制运算符的类(对象):它现在基本上无法复制。我有一个

std::map<int,Object> objects

列出具有 int 标识符的对象的变量。如何在不使用复制运算符的情况下向此 map 添加对象? 我试过了

objects.insert(std::pair<0,Object()>);

但这不会编译。我只想使用默认构造函数在 map 内创建我的对象,但编写

objects[0];失败... 谢谢:)

最佳答案

在 C++03 中,存储在 STL 容器中的对象必须是可复制的。这是因为 STL 容器的 std::allocator 实际上使用 new 操作符的放置版本来复制构造预分配内存块中的对象,这需要存在复制构造函数,用于将要添加到容器中的对象的实际实例复制到容器分配器预先分配的内存地址中。因此,您唯一的选择是存储指向对象的指针,而不是对象本身。因此,您可以执行以下操作:

std::map<int, std::shared_ptr<Object> > objects;
objects.insert(std::pair<int, std::shared_ptr<Object> >(0, new Object());

关于c++ - 是否可以在 C++ 中将 std::map 与没有任何复制运算符的类一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6231336/

相关文章:

C++。一个类的成员对象的智能指针,该类的实例本身由一个智能指针拥有。必要的?

c++ - 错误 127 g++ : Command not found

c++ - 奥格/沃比斯 : _ov_fopen cannot be found

c++ - C++中内置类型的自定义构造函数

C++ 类复制构造函数没有匹配的函数

c++ - 为什么在这种情况下不调用复制构造函数?

c++ - 是否可以在不编写复制构造函数的情况下在 main 中的构造函数之间进行选择?

c++ - 遍历用户输入中的每个字符

java - 静态工厂相对于构造函数的劣势

c++ - 可以通过在基类中声明复制构造函数/运算符私有(private)来使派生类不可复制吗?