代码改变世界

c++11 auto unique_ptr 等

  youxin  阅读(369)  评论(0编辑  收藏  举报

 

 

c++11 条款21:尽量使用std::make_unique和std::make_shared而不直接使用new

 

c++11 条款18: 使用std::unique_ptr来进行独享所有权的资源管理

https://msdn.microsoft.com/zh-cn/library/hh279676.aspx

unique_ptr 不共享它的指针。它无法复制到其他 unique_ptr无法通过值传递到函数,也无法用于需要副本的任何标准模板库 (STL) 算法。只能移动unique_ptr这意味着,内存资源所有权将转移到另一 unique_ptr,并且原始 unique_ptr 不再拥有此资源。我们建议你将对象限制为由一个所有者所有,因为多个所有权会使程序逻辑变得复杂。因此,当需要智能指针用于纯 C++ 对象时,可使用 unique_ptr,而当构造 unique_ptr 时,可使用make_unique Helper 函数。

下图演示了两个 unique_ptr 实例之间的所有权转换。

unique_ptr 在 STL 的 <memory> 标头中定义。它与原始指针一样有效,并可用于 STL 容器。将 unique_ptr 实例添加到 STL 容器很有效,因为通过unique_ptr 的移动构造函数,不再需要进行复制操作。

以下示例演示如何创建 unique_ptr 实例并在函数之间传递这些实例。

 

 

 

 

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2013-06-07 CodeIgniter URL
2013-06-07 CodeIgniter入门案例之简单新闻系统三
2013-06-07 CodeIgniter数据库类
2012-06-07 二叉树四种遍历方式总结及解剖及求深度节点数及宽度
2012-06-07 什么是向上兼容和向下兼容?
2012-06-07 c++ allocator类
点击右上角即可分享
微信分享提示