我有一个带有private_ptr的私有std :: map的类:
// my_class is of type MyClass
auto ptr = my_type_factory(...); // my_type_factory returns a std::unique_ptr<my_type>
....
my_class[1] = std::move(auto_ptr);
我选择了unique_ptr,因为my_map是my_type对象的唯一所有者。
我想公开一个operator []公共成员函数来访问(完美转发)my_map。 类似的东西:
class MyClass{
....
public:
auto operator[](KeyType && key) { return my_map[std::forward<KeyType>(key)]; }
// or return & my_map[...];
};
我尝试过使用operator []的各种可能定义:
{{1}}
但它不起作用,最后我总是调用unique_ptr的已删除拷贝构造函数。
只是为了向前推进,如果我将my_map移动到公共界面我已经通过所有测试,但这当然是作弊,因为我正在努力提高我现代的C ++技能,我认为我有一些原则还没有使用unique_ptr和移动。
所以我的问题是:如何在私有std :: map中使用std :: unique_ptr?
答案 0 :(得分:4)
您应该返回参考。
auto & operator[](KeyType && key) { return my_map[std::forward<KeyType>(key)]; }