есть полиморфная иерархия обьектов
struct Base
{
virtual ~Base();
};
struct Derived : public Base {}
есть список указателей на базовые обьекты
std::list<boost::shared_ptr<Base> > my_list;
допустим я как-то получаю из этого списка необходимый мне элемент
как передать его в функцию, которая ожидает boost::shared_ptr<Derived>?
можно разименовать указатель на Base, сделать ему dynamic_cast, и если всё хорошо, создать нужный тип, но тогда потеряется счетчик и произойдет двойное удаление в деструкторе list.