让B衍生自A类。通过阅读各种文章,我给人一种像in那样的印象
const std::shared_ptr<const A> a(new B());
const std::shared_ptr<const B>& b = reinterpret_cast<const std::shared_ptr<const B>&>(a);
由于某种原因而被劝阻,应该改用reinterpret_pointer_cast。但是,出于性能原因,我想避免创建新的shared_ptr。上面的代码合法吗?是否会导致不确定的行为?它似乎可以在gcc和Visual Studio中使用。
const std::shared_ptr<const A> a(new B());
const std::shared_ptr<const B> b = std::static_pointer_cast<const B>(a);
另一个提示。尽量避免在具有继承关系的类之间使用reinterpret_cast
。在存在虚拟方法和多重继承的情况下,static_cast
将正确地将指针偏移调整为正确的vtable。如reinterpret_cast不会在哪里。