gpt4 book ai didi

c++ - std::shared_ptr 向上转换到基类 - 最好的方法?

转载 作者:IT老高 更新时间:2023-10-28 22:27:11 27 4
gpt4 key购买 nike

哪种转换更好,有什么区别?

class Base
{};

class Derived : public Base, public std::enable_shared_from_this<Derived>
{};

int main(int argc, const char * argv[])
{
std::shared_ptr<Base> ptr1 = std::dynamic_pointer_cast<Base>(std::shared_ptr<Derived>(new Derived())); // version 1
std::shared_ptr<Base> ptr2 = std::shared_ptr<Derived>(new Derived()); // version 2
return 0;
}

最佳答案

shared_ptr 的其他用例一样,您应该更喜欢使用 make_shared而不是构造 shared_ptr手动:

std::shared_ptr<Base> ptr2 = std::make_shared<Derived>();

这实际上是您的版本 2,加上 the various benefits of make_shared .

版本 1 做了很多不必要的事情:首先你构建一个临时的 shared_ptr<Derived> , 那么你 dynamic_cast将其内容指向基类指针(而 static_cast 在这里就足够了),然后将该指针存储在不同的 shared_ptr<Base> 中.因此,您有很多不必要的运行时操作,但与第 2 版相比,在类型安全方面没有任何好处。

关于c++ - std::shared_ptr 向上转换到基类 - 最好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21018774/

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