Чтобы иметь набор weak_ptr
с, вам необходим std::owner_less<>
, специальный оператор сравнения:
std::set<std::weak_ptr<Test>, std::owner_less<std::weak_ptr<Test>>> weakrefs;
Этот оператор сравнения использует административный регион для поиска интеллектуальных указателей, а не указателей на объект, на который они указывают. Это необходимо, потому что объект может быть удален, пока умные указатели все еще находятся в std::set
.
. Вы должны также использовать std::owner_less
для набора shared_ptr
с.