c++ - Using operator[] to access a private std::map of unique_ptr -


i have class private std::map of unique_ptr:

class myclass{ std::map <keytype, std::unique_ptr<my_type>> my_map; ... }; 

i chose unique_ptr because my_map sole owner of my_type objects.

i expose operator[] public member function access (perfect forwarding) my_map. like:

// my_class of type myclass auto ptr = my_type_factory(...); // my_type_factory returns std::unique_ptr<my_type> .... my_class[1] = std::move(auto_ptr); 

i have tried various possible definitions of operator[] :

class myclass{ .... public: auto operator[](keytype && key) { return my_map[std::forward<keytype>(key)]; }  // or return & my_map[...]; }; 

but doesn't work, in end invoking deleted copy constructor of unique_ptr.

just move forward, if move my_map public interface have made tests pass, cheating of course, since trying refine modern c++ skills , think there principle have not grokked yet unique_ptr , move.

so question is: how use std::unique_ptr's in private std::map?

you should return reference.

auto & operator[](keytype && key) { return my_map[std::forward<keytype>(key)]; }  

Comments

Popular posts from this blog

python - Operations inside variables -

Generic Map Parameter java -

arrays - What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it? -