关于智能指针的文献实在是太多了,能读多少就读多少。我只想要一个简单的答案。
我已经为我的 3D 渲染器引擎使用了原始指针,现在我必须在渲染器之间共享一些小部件,所以智能指针来了。请指导我是否应该使用智能指针 (std::shared_ptr) 更新我的整个软件/库?在这种情况下会有什么缺点?我知道优点,只是想知道有什么缺点吗?在从原始指针到智能指针的转换过程中,我应该考虑哪些重要的事情?请具体点?谢谢。
最佳答案
通常,它们是一个有用的工具,但并非所有任务都适合单个工具。也就是说,您应该考虑以下几点:
- 了解智能指针是一项很有值(value)的技能。了解它们是在适当的时候应用它们并在少数情况下忽略它们的基础。
- 智能指针不仅仅是
std::shared_ptr
.还有std::unique_ptr
, 也看看std::make_shared
,std::make_unique
(C++14) 和std::enable_shared_from_this
至少。 - 经过时
std::shared_ptr
作为参数,确保你没有添加同步的、多余的引用计数操作,例如,使用const std::shared_ptr<...>&
. - 即使标准化的智能指针不是正确的工具,了解它们的工作原理并创建您自己的 RAII 包装器 - 仍然比成熟的、容易出错的原始指针更好。
- 在连接现有的 C 风格 API 时,您仍然可以经常使用智能指针,并且只在需要时将原始指针传递给那些 API,使用
.get()
在智能指针上。
关于c++ - 我应该为我的应用程序和库使用智能指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31096378/