首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我应该在应用程序和库中使用智能指针吗?

我应该在应用程序和库中使用智能指针吗?
EN

Stack Overflow用户
提问于 2015-06-28 05:14:05
回答 2查看 431关注 0票数 0

有那么多关于智能指针的文献,我已经尽可能多地阅读了。我只想要一个简单的答案。

我在3D渲染器引擎中使用了原始指针,现在我必须在渲染器之间共享一些小部件,所以智能指针来了。请指导我是否应该用智能指针(std::shared_ptr)更新我的整个软件/库?那件案子的缺点是什么?我知道优点,只是想知道有什么坏处吗?在从原始指针到智能指针的转换过程中,我应该考虑哪些事情是重要的?请说得具体一点?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-28 09:13:36

一般来说,它们是一个有用的工具,但并不是所有的任务都适合于单个工具。话虽如此,以下是一些你应该考虑的事情:

  • 学习智能指针是一项很有价值的技能。了解它们是在适当的时候应用它们的基础,而在少数情况下则是忽略它们的基础。
  • 智能指针不仅仅是std::shared_ptr。还有std::unique_ptr,也可以查看std::make_sharedstd::make_unique (C++14)和std::enable_shared_from_this作为最小值。
  • 当将std::shared_ptr作为参数传递时,请确保不添加同步的、多余的引用计数操作,例如,使用const std::shared_ptr<...>&
  • 即使标准化的智能指针不是正确的工具,也要知道它们是如何工作的,并创建您自己的RAII包装器--仍然比完整的、容易出错的原始指针更好。
  • 在接口现有的C样式API时,仍然可以经常使用智能指针,并且只在需要时将原始指针传递给那些API,在智能指针上使用.get()
票数 4
EN

Stack Overflow用户

发布于 2015-06-28 17:55:16

关于智能指针的优点,还有其他人已经说过,我建议在适当的情况下在应用程序中使用它们。

当谈到库的API时,我会说:它取决于。如果以源形式分发库,则可以在API中使用智能指针,用户可能会从中受益。但是,如果要将库作为DLL分发,则智能指针不是正确的工具。这是因为它们被定义为模板,模板类不能作为DLL分发。库的用户将被迫使用与生成DLL完全相同的编译器和模板库--这可能不是您想要的。因此,对于DLL的API,在使用智能指针之前我会三思而后行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31096378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档