std :: vector из std :: weak_ptr и std :: find - PullRequest
3 голосов
/ 22 марта 2012

В настоящее время я пытаюсь заменить некоторые части моего кода на std :: shared_ptr и std :: weak_ptr.Во многих частях у меня есть std :: vectors из 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); 

Спасибо

1 Ответ

9 голосов
/ 22 марта 2012

Не принимая во внимание дизайн, вы можете использовать std::find_if с пользовательским компаратором, который проверяет, является ли weak_ptr действительным, а затем сравнивает внутренние указатели, если они есть.

...