У меня есть набор общих указателей:Удалить из ЗППП :: набор <shared_ptr <T>> Т *
std::set<boost::shared_ptr<T>> set;
и указатель:
T* p;
Я хотел бы эффективно удалите элемент set
, равный p
, но я не могу сделать это ни с одним из элементов набора или с любым из стандартных алгоритмов, так как T*
- это совсем другой тип: boost::shared_ptr<T>
.
Несколько подходов я могу думать о том, являются:
- как-то строительство нового shared_ptr из указателя, который не будет брать на себя ответственность заостренный памяти (идеальное решение, но я не могу видеть, как сделать это)
- оберточную/повторного внедрения shared_ptr, так что я могу сделать выше
- просто делает свой собственный бинарный поиск по множеству
Почему у вас есть этот необработанный указатель T в любом случае? – dalle
Почему бы и нет? Я часто встречаюсь с умными указателями в классе «Factory» и только с внешними указателями/ссылками. Внешняя сторона не должна знать, как я управляю своими объектами. –