enable_shared_from_this и наследование - PullRequest
27 голосов
/ 20 декабря 2010

У меня есть тип, который наследуется от enable_shared_from_this<type>, и другой тип, который наследуется от этого типа. Теперь я не могу использовать метод shared_from_this, потому что он возвращает базовый тип, а в конкретном методе производного класса мне нужен производный тип. Допустимо ли просто создать shared_ptr из этого напрямую?

Edit: В связанном вопросе, как я могу перейти от значения типа shared_ptr<base> к типу shared_ptr<derived>? Я использовал dynamic_cast, чтобы проверить, что это действительно был правильный тип, но теперь я не могу выполнить фактическое движение.

1 Ответ

21 голосов
/ 20 декабря 2010

Получив shared_ptr<Base>, вы можете использовать static_pointer_cast, чтобы преобразовать его в shared_ptr<Derived>.

Вы не можете просто создать shared_ptr непосредственно изthis;это будет эквивалентно:

shared_ptr<T> x(new T());
shared_ptr<T> y(x.get()); // now you have two separate reference counts
...