繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM