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