gpt4 book ai didi

c++ - 使用 operator[] 访问 unique_ptr 的私有(private) std::map

转载 作者:行者123 更新时间:2023-11-30 01:39:27 26 4
gpt4 key购买 nike

我有一个带有 unique_ptr 的私有(private) std::map 的类:

class MyClass{
std::map <KeyType, std::unique_ptr<my_type>> my_map;
...
};

我选择 unique_ptr 是因为 my_map 是 my_type 对象的唯一所有者。

我想公开一个 operator[] 公共(public)成员函数来访问(完美转发)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 移动到公共(public)接口(interface),我已经通过了所有测试,但这当然是作弊,因为我正在努力完善我的现代 C++ 技能,并且我认为我有一些原则还没有用 unique_ptr 和移动 grokked。

所以我的问题是:如何在私有(private) std::map 中使用 std::unique_ptr?

最佳答案

你应该返回一个引用。

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

关于c++ - 使用 operator[] 访问 unique_ptr 的私有(private) std::map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45780334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com