std :: shared_ptr upcasting到基类 - 最好的方法?

 滴答滴答箫雨伞_335 发布于 2023-02-04 20:21

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

class Base
{};

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

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

ComicSansMS.. 16

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

std::shared_ptr ptr2 = std::make_shared();

这基本上是你的版本2,加上各种好处make_shared.

版本1做了一堆不必要的东西:首先你构造一个临时的shared_ptr,然后你dynamic_cast的内容到一个基类指针(虽然static_cast这里就足够了),然后你将该指针存储在另一个shared_ptr.因此,您有许多不必要的运行时操作,但没有类型安全性优于第2版.

1 个回答
  • 与其他用例一样shared_ptr,您应该更喜欢使用make_shared而不是shared_ptr手动构建:

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

    这基本上是你的版本2,加上各种好处make_shared.

    版本1做了一堆不必要的东西:首先你构造一个临时的shared_ptr<Derived>,然后你dynamic_cast的内容到一个基类指针(虽然static_cast这里就足够了),然后你将该指针存储在另一个shared_ptr<Base>.因此,您有许多不必要的运行时操作,但没有类型安全性优于第2版.

    2023-02-04 20:24 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有