gpt4 book ai didi

c++ - 对 shared_ptr 的引用的 reinterpret_cast

转载 作者:行者123 更新时间:2023-11-28 04:08:49 24 4
gpt4 key购买 nike

让 B 派生自类 A。通过阅读各种帖子,我的印象是像在中一样进行转换

    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。

最佳答案

你想要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);

我非常怀疑以上内容会导致任何性能问题。但是,如果您有证据表明 shared_ptr 会造成性能问题,则回退到原始指针:

    const B* pB = static_cast<const B*>(a.get());

另一个提示。请尽量避免在有继承关系的类之间reinterpret_cast。在存在虚方法和/或多重继承的情况下,static_cast 会将指针偏移正确调整为正确的 vtable 或基本偏移。但是 reinterpret_cast 不会。 (或者技术上:未定义的行为)

关于c++ - 对 shared_ptr 的引用的 reinterpret_cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58237609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com