РЕДАКТИРОВАТЬ: Пересмотр этого ответа (поскольку он выкопан снова и прошло много времени).
Классы A
и B
могут иметь отношение наследования, но shared_ptr<A>
и shared_ptr<B>
- нет.shared_ptr
является классом шаблона, и создание экземпляра шаблона с A
не связано с созданием экземпляра с B
.
Использование C-подобного приведения (или reinterpret_cast
) работает, но только потому, что вы выполняете реинтерпретацию базовых битов.dynamic_cast
в двух разных экземплярах shared_ptr
завершится ошибкой, поскольку вы не разыгрываете унаследованные указатели, а пытаетесь разыграть умные указатели, которые являются совершенно разными и несовместимыми типами.
На ваш заданный вопрос ответ (все еще) нет.