![](/img/trans.png)
[英]Proper syntax to use std::map access operator [] via std::unique_ptr
[英]Using operator[] to access a private std::map of unique_ptr
我有一类具有unique_ptr的私有std :: map的类:
class MyClass{
std::map <KeyType, std::unique_ptr<my_type>> my_map;
...
};
我选择unique_ptr是因为my_map是my_type对象的唯一所有者。
我想公开一个operator []公共成员函数来访问(完美转发)my_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);
我尝试了operator []的各种可能定义:
class MyClass{
....
public:
auto operator[](KeyType && key) { return my_map[std::forward<KeyType>(key)]; }
// or return & my_map[...];
};
但它不起作用,最后我总是调用unique_ptr的已删除副本构造函数。
只是继续前进,如果我将my_map移到公共接口,则我所有的测试都通过了,但这当然是作弊的,因为我正在尝试改进现代C ++技能,并且我认为有些原则我没想到但与unique_ptr和移动。
所以我的问题是:如何在私有std :: map中使用std :: unique_ptr?
您应该返回参考。
auto & operator[](KeyType && key) { return my_map[std::forward<KeyType>(key)]; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.