无法重置std :: set <>中的std :: shared_ptr对象……为什么?

问题描述 投票:0回答:1

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

但是当我尝试在集合中进行操作时,我得到了错误。

错误消息是[没有匹配的成员函数来调用'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!!!
}
  • OS:Ubuntu18.04
  • 编译器:g ++ 7.5.0-3ubuntu1〜18.04
c++ c++11 smart-pointers stdset
1个回答
2
投票

主要问题是std::set是一个[[ordered容器,并且仅在插入时才进行排序。

为了保持顺序,集合中的所有键都是

constant

,无法修改。您尝试修改std::set的键时会有相同的问题。
© www.soinside.com 2019 - 2024. All rights reserved.