Если у меня есть vector<weak_ptr<Type>>
, я не могу использовать vector::erase(remove())
для удаления нужного weak_ptr
, потому что у него нет оператора сравнения==.
Лямбда-предикат должен быть передан в remove_if
в vector::erase(remove_if())
для сравнения базовых исходных указателей, доступ к которым осуществляется через weak_ptr::_Get()
_Get()
начинается с подчеркивания и заглавной буквы, что означает, что он зарезервирован для реализации и не предназначен для доступа пользователя.
Понятно, что weak_ptr
не должны были храниться таким образом, но почему?
Я думал об использовании vector<weak_ptr<>>
для хранения weak_ptr
s в дочернем классе только некоторых объектов, которые у меня есть в классе менеджера, которые нуждаются в дальнейшей обработке и, таким образом, с помощью lock()
ing убеждаюсь, что они не были удалены. в управляющем классе (в многопоточном приложении).
Менеджер предупреждает дочерний класс о создании и удалении объекта, сохраняя vector<weak_ptr<>>
актуальным.
==
? Тот самыйweak_ptr
? Или разныеweak_ptr
для одного и того же объекта? Или разныеweak_ptr
для разных объектов с одинаковым значением? - person Galik   schedule 13.04.2018std::remove_if
, который не сработал? - person Galik   schedule 13.04.2018a.lock() == b.lock()
и не полагаться на детали внутренней реализации. - person Igor Tandetnik   schedule 13.04.2018weak_ptr
. - person Igor Tandetnik   schedule 13.04.2018