我目前正在尝试用std :: shared_ptr和std :: weak_ptr替换我的代码的某些部分。在很多部分我都有std ::的std :: weak_ptrs(以前是原始的ptrs),并使用std :: find来查找数组中的某个指针。这不适用于弱指针,因为它们由于各种原因不实现==运算符。我必须坚持使用std :: weak_ptr来避免循环依赖。我可以选择使用原始指针而不是弱指针吗?
示例
//_window is a shared_ptr that I want to find in a vector of weak_ptrs
WindowWeakPtrArray::iterator it = std::find(m_windows.begin(), m_windows.end(), _window);
由于
答案 0 :(得分:9)
不考虑设计,可以使用std::find_if
和自定义比较器来验证weak_ptr
是否有效,然后比较内部指针。