无法重置 std::shared_ptr 标准::设置<>中的对象...为什么?

cannot reset std::shared_ptr object inside std::set<>... why?

本文关键字:lt gt 为什么 对象 标准 std shared ptr 设置      更新时间:2023-10-16

在下面的c ++调用reset((内部列表,向量,映射既没有错误也没有警告。

但是当我尝试在集合中执行此操作时,我收到错误。

错误消息是 [ 没有匹配的成员函数来调用"重置" ]

为什么会这样???有人可以与社区分享您的知识吗?

std::shared_ptr<int> sp;
sp.reset(new int(11));
sp.reset();
std::map<int, std::shared_ptr<int>> my_map;
for (auto it = my_map.begin(); it != my_map.end(); ++it) {
it->second.reset();
(*it).second.reset();
}
std::list<std::shared_ptr<int>> my_list;
for (auto& x : my_list) {
x.reset();
}
std::vector<std::shared_ptr<int>> my_vec;
for (auto it = my_vec.begin(); it != my_vec.end(); ++it) {
it->reset();
(*it).reset();
}
std::set<std::shared_ptr<int>> my_set;
for (auto& x : my_set) {
x.reset();      // ERROR!!!
}
for (auto it = my_set.begin(); it != my_set.end(); ++it) {
it->reset();    // ERROR!!!
(*it).reset();  // ERROR!!!
}
  • 操作系统 : Ubuntu18.04
  • 编译器:g++ 7.5.0-3ubuntu1~18.04

主要问题是std::set是一个有序的容器,并且排序仅在插入时完成。

为了保持顺序,集合中的所有键都是恒定的,不能修改。

尝试修改std::map的密钥时,您将遇到相同的问题。