使用operator []访问unique_ptr的私有std :: map

时间:2017-08-20 09:01:50

标签: c++ c++11 unique-ptr stdmap

我有一个带有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?

1 个答案:

答案 0 :(得分:4)

您应该返回参考。

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