c++ - 我应该为我的应用程序和库使用智能指针吗?

标签 c++ pointers c++11 shared-ptr smart-pointers

关于智能指针的文献实在是太多了,能读多少就读多少。我只想要一个简单的答案。

我已经为我的 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/

相关文章:

c++ - 指向可变函数模板的指针

c++ - 如何在 C++ 中使用 UAC-shield 创建菜单项?

c++ - Windows:构建同一 DLL 的 32 位和 64 位版本

C 指针给出随机值

arrays - Fortran 可分配数组和指针之间的等价性

algorithm - 从顶点初始化半边数据结构

c++ - 如何将 lambda (c++11) 传递给模板函数?

c++ - CScrollView 只滚动大面积的部分区域

c++ - 如何将任何化合物还原为非化合物类型

c - C中使用指针的矩阵乘法