使用unique_ptr创建对象并为容器提供所有权是没有问题的.如何通过原始指针删除元素?
std::set<std::unique_ptr<MyClass>> mySet;
MyClass *myClass = new MyClass();
mySet.insert(std::unique_ptr<MyClass>(myClass));
// remove myClass from mySet?
Run Code Online (Sandbox Code Playgroud)
小智 3
您需要找到与该myClass元素对应的迭代器,然后将该迭代器传递给mySet.erase(). 可以使用std::find_if带有自定义函子的算法来找到迭代器Predicate,该函子了解如何取消引用unique_ptr并将其与原始指针进行比较myClass。
您不能使用重载,因为在 中找不到size_t set::erase ( const key_type& x );原始指针(即使包装在临时指针中) 。unique_ptrmySet
| 归档时间: |
|
| 查看次数: |
4044 次 |
| 最近记录: |