我正在使用一个没有任何复制运算符的类(对象):它现在基本上无法复制。我有一个
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/