假设我有一组 unique_ptr:
std::unordered_set <std::unique_ptr <MyClass>> my_set;
我不确定如何安全地检查集合中是否存在给定指针。通常的方法可能是调用my_set.find()
,但我应该传递什么参数?
从外部获取到的只有一个原始指针。因此,我必须创建另一个unique_ptr来自指针,将其传递给find()
,然后释放该指针,否则对象会被析构(两次)。当然,这个过程可以在函数中完成,这样调用者就可以传递原始指针,我进行转换。
这种方法安全吗?是否有更好的方法来处理一组unique_ptr?
unique_ptr
显然不是你需要的,因为你明显有指向该对象的其他指针。 - James Kanzestd::unique_ptr
并不一定是某个对象的唯一指针。"unique"并不是指唯一地址,而是指独自拥有。一个不拥有其所指对象的std::shared_ptr
是更严重的正确性问题。 - Christian Rauset
,而这个问题要求使用unordered_set
,这是一个很大的区别。 - IS4set
对于find()
有透明的比较器,而unordred_set
则没有。 - Mikhail