增压的最佳选择:scoped_ptr<T>痘痘
Best choice over boost:scoped_ptr<T> pimpl
我不是在使用boost只是标准库,我在某些问题中看到boost::scoped_ptr<T>
和std::unique_ptr
之间的主要区别在于boost::scoped_ptr<T>
既不可复制也不可移动,那么我想知道,什么是最好的选择boost::scoped_ptr<T>
?使用std::unique_ptr
或使用具有三/五规则的原始指针以避免复制和移动?
我建议使用const std::unique_ptr
。
你几乎从不想直接管理原始指针,所以unique_ptr
是唯一明智的选择(shared_ptr
不适合 pimpl,你很少想共享 impl 对象)。添加const
将使其不可移动,例如scoped_ptr
。
这个问题有点模棱两可,但答案非常明确,你应该使用 std::unique_ptr 或 std::shared_ptr 来保存你的 pimpl,这取决于你是希望你的类共享状态 (shared_ptr) 还是具有独占访问权限,具有自动移动的好处 (unique_ptr)。
裸指针的管理非常难以正确,如果您在同一类中管理多个指针,则是不可能的。 unique_ptr 旨在帮助您轻松编写完美的程序。
你最好使用它。
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 痘痘成语和交换
- 如何显式调用运算符<<
- 模板操作员&lt;未打电话
- C / CUDA中的模板方法是3个角括号(&lt;&lt;&lt;)
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- C++ 在痘痘成语中,在类前或成员之前向前声明
- C 建造者Clang STD :: Sill,找不到超载的操作员&lt;
- 具有模板成员函数的痘痘成语
- 痘痘设计模式会阻止您编译吗?
- 痘痘成语作为模板基类
- "api design for c++":C++痘痘访问
- C++痘痘避免空白*
- 增压的最佳选择:scoped_ptr<T>痘痘
- 是 c# 中使用的痘痘习语
- 有没有建议对c++语言进行扩展,以消除痘痘