我正在使用没有任何复制运算符的类(对象):基本上现在无法复制。我有一个
std::map<int,Object> objects
列出具有int标识符的对象的变量。如何在不使用复制运算符的情况下将Object添加到此映射?
我试过了
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/

10-17 02:02