есть полиморфная иерархия обьектов
struct Base
{
virtual ~Base();
};
struct Derived : public Base {}
есть список указателей на базовые обьекты
std::list<boost::shared_ptr<Base> > my_list;
допустим я как-то получаю из этого списка необходимый мне элемент
как передать его в функцию, которая ожидает boost::shared_ptr<Derived>?
можно разименовать указатель на Base, сделать ему dynamic_cast, и если всё хорошо, создать нужный тип, но тогда потеряется счетчик и произойдет двойное удаление в деструкторе list.
Здравствуйте, <Аноним>, Вы писали:
А>можно разименовать указатель на Base, сделать ему dynamic_cast, и если всё хорошо, создать нужный тип, но тогда потеряется счетчик и произойдет двойное удаление в деструкторе list.
Фрагмент shared_ptr.hpp
...
template<class T, class U> shared_ptr<T> dynamic_pointer_cast(shared_ptr<U> const & r)
{
return shared_ptr<T>(r, detail::dynamic_cast_tag());
}
...
Ы?
... << RSDN@Home 1.1.3 beta 1 >>
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, <Аноним>, Вы писали:
А>>можно разименовать указатель на Base, сделать ему dynamic_cast, и если всё хорошо, создать нужный тип, но тогда потеряется счетчик и произойдет двойное удаление в деструкторе list.
WH>Фрагмент shared_ptr.hpp
WH>WH>...
WH>template<class T, class U> shared_ptr<T> dynamic_pointer_cast(shared_ptr<U> const & r)
WH>{
WH> return shared_ptr<T>(r, detail::dynamic_cast_tag());
WH>}
WH>...
WH>
WH>Ы?
вот лопухнулся-то
надо было просто внимательнее прочитать по shared_ptr
спасибо