对shared_ptr的引用的重新广播

问题描述 投票:0回答:1

让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中使用。

c++ shared-ptr reinterpret-cast
1个回答
0
投票

您想要static_pointer_cast

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不会在哪里。

© www.soinside.com 2019 - 2024. All rights reserved.