std::vector<std::shared_ptr<Base>>* castedVector =
reinterpret_cast<std::vector<std::shared_ptr<Base>>*>(&originalVector);
Это неопределенное поведение, выполните , а не .
Вы можете создать vector
указателей на базу, скопировав , не обманываядля системы типов:
std::vector<std::shared_ptr<Base>> baseVector(originalVector.begin(), originalVector.end());
Содержит копии оригинальных указателей, которые делятся с ними правами собственности, но содержащиеся указатели имеют Base*
вместо Derived*
.
Очевидно, есливы вставляете новое значение в originalVector
, а не в baseVector
, поэтому вам нужно будет сделать новую копию всего originalVector
или вставить его в оба одновременно.