如何从容器中删除指针中的unique_ptr?

maz*_*ork 7 unique-ptr c++11

使用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