std::unique_ptr::get 的意义何在
what's the point of std::unique_ptr::get
std::unique_ptr::get
首先不是违背了拥有unique_ptr的目的吗?我本来希望这个函数会改变它的状态,所以它不再包含指针。std::unique_ptr:get是否有实际有用的用途?
std::unique_ptr
安全地提供唯一的所有权语义。但是,这并不排除对非拥有指针的需求。 std::shared_ptr
有一个非拥有的对应物,std::weak_ptr
.原始指针作为std::unique_ptr
的非拥有对应物运行。
每次需要将原始指针传递给 C 函数时,您都会使用它:
std::unique_ptr<char[]> buffer( new char[1024] );
// ... fill the buffer
int rc = ::write( fd, buffer.get(), len );
我倾向于遵循的规则是这样的:如果被调用方没有为生存期/所有权而烦恼,请不要向它传递智能指针; 相反,传入原始C++引用(首选)或原始指针。 我发现将所有权与使用的关注分开要干净、更灵活。
当你的双手被绑住并且你确实需要传递指向某物的指针时,p.get()
读起来比&*p
更好。
有一个函数可以更改状态,因此unique_ptr
不再持有指针,并且该函数名为 release
。这对于将所有权转移到其他不提供从unique_ptr
直接构造的智能指针非常有用。任何其他使用都有泄漏资源的风险。
当你需要调用C API或设计不佳的C++API时,会出现明显的情况。
Herb Sutter 有一个很好的解释(大约 3:40)https://www.youtube.com/watch?v=JfmTagWcqoE
主要优点是唯一指针跟踪该指针的其他引用数量。只有在使用所有权时,才能使用唯一指针。当您想使用该指针对数据执行某些操作时,请传递原始指针。
相关文章:
- Cpp-Tuple使用带有变量的get
- 为什么 std::unique 不调用 std::sort?
- 通过 get-Method 访问变量在类外不起作用
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- Boost.Asio/OpenSSL HTTPS GET certificate trouble
- C++中是否有任何函数等同于python中字典的get函数?
- 使用istringstearm和get行缓慢读取文件
- 如何将 c++ get 函数代码转换为 opencv 算法中使用的 python
- 生成"unique"矩阵
- 使用 cin.get() 初始化字符数组
- std::variant<>::get() 不能使用 Apple LLVM 10.0 编译
- 编写 cin.get() 以接收字符数组时出现问题
- 作用域枚举和标准::get
- Visual Studio 2017 中的 cpprestapi 问题找不到 POST/GET 常量
- 在 C++/C 中使用 CURL 发出带有数据文件的 GET HTTP 请求
- 使用"push_back"作为带有"get"函数C++的向量
- 使用 cin.get 读取字符数组
- 我对 std::unique(算法)C++有问题
- 如何使用 fstream 的 .get 字符串?
- std::get like (partial) template specialization