I'm using a Class (Object) that doesn't have any copy operator : it basically cannot be copied right now. I have a
std::map<int,Object> objects
variable that lists objects with an int identifier. How could I add an Object to this map without having to use copy operators? I tried
objects.insert(std::pair<0,Object()>);
but that won't compile. I would just like to create my object initially inside the map using the default constructor, but writing
objects[0];
fails...
Thanks :)
Not in C++03. How are you going to get the object from wherever it is now into the map without a copy constructor?
In C++0x then you could move into the map, and in theory, perfectly forward to construct one in place from other arguments.
Edit: You could swap it, if it's swappable, and you can default construct it in-place using
operator[]
.Since your object is not copy-constructible, you could create your map containing shared_ptr :
That takes care of destruction of objects.
In C++03, objects that are stored in STL containers must be copyable. This is because a STL container's
std::allocator
actually uses the placement version of thenew
operator to copy construct the objects in pre-allocated memory blocks, and that requires the existence of a copy-constructor to copy the actual instance of the object you're wanting to add to the container into the memory address that had been pre-allocated by the container's allocator. So your only option would be to store pointers to your objects rather than the objects themselves. Therefore, you could do the following: