新闻中心

c++ unique_ptr怎么使用_c++独占智能指针用法说明

2025-10-30
浏览次数:
返回列表
std::unique_ptr是C++中独占式智能指针,通过移动语义转移所有权,不可复制,离开作用域自动释放内存,推荐使用std::make_unique创建,支持动态数组管理,有效防止内存泄漏。

c++ unique_ptr怎么使用_c++独占智能指针用法说明

在C++中,std::unique_ptr 是一种独占式智能指针,用于自动管理动态分配的对象生命周期。它确保同一时间只有一个 unique_ptr 拥有该对象,当指针离开作用域时,所指向的对象会自动被删除,防止内存泄漏。

基本用法

创建一个 unique_ptr 通常使用 std::make_unique(C++14起支持),这是最安全、推荐的方式:

#include <memory>
#include <iostream>
<p>int main() {
auto ptr = std::make_unique<int>(42);
std::cout << *ptr << "\n"; // 输出: 42</p><pre class='brush:php;toolbar:false;'>return 0;

} // ptr 离开作用域,自动释放内存

如果无法使用 C++14,可以用 std::unique_ptr<t>(new T)</t> 构造,但不推荐直接写 new,容易引发异常安全问题。

不能复制,可以移动

unique_ptr 不允许复制构造或赋值,因为它是“独占”的:

auto ptr1 = std::make_unique<int>(10);
// auto ptr2 = ptr1;        // 错误:不能复制
auto ptr2 = std::move(ptr1); // 正确:转移所有权

执行 std::move 后,ptr1 变为 nullptr,不再拥有对象,ptr2 成为唯一所有者。

Pinokio Pinokio

Pinokio是一款开源的AI浏览器,可以安装运行各种AI模型和应用

Pinokio 232 查看详情 Pinokio

作为函数参数和返回值

unique_ptr 传入函数时,建议使用移动语义或引用:

void process(std::unique_ptr<int> ptr) {
    std::cout << "Value: " << *ptr << "\n";
}
<p>auto createPtr() {
return std::make_unique<int>(100);
}</p><p>// 使用示例:
auto p = createPtr();           // 接收返回的 unique_ptr
process(std::move(p));          // 转移所有权给函数</p>

如果函数只需读取而不获取所有权,应使用指针或引用接收:void view(int* p)void view(const int& p)

数组支持

对于动态数组,unique_ptr 也支持,但需指定数组类型:

auto arr = std::make_unique<int[]>(10); // 创建长度为10的数组
arr[0] = 5;
// arr[1] = ... 可正常访问

注意:make_unique 对数组只能初始化为未定义值,不能像普通对象那样传递初始值。

基本上就这些。合理使用 unique_ptr 能有效避免手动管理内存带来的风险,提升代码安全性和可维护性。关键点是理解“独占”语义和移动机制。不复杂但容易忽略。

以上就是c++++ unique_ptr怎么使用_c++独占智能指针用法说明的详细内容,更多请关注其它相关文章!


# c++  # ios  # stream  # 作用域  # 游戏开发  # 这是  # 或引用  # ai  # 湖里区网站seo优化  # seo主管怎么样  # 安阳建设网站推广  # 商丘优化网站建设  # 招聘seo怎么做  # 竞价推广网站数据  # 网站推广的四个阶段是  # 奶茶营销推广文献资料  # seo淘宝搜索优化  # 定制网站建设优惠  # 而不  # 它是  # 推荐使用  # 只需  # 可以用  # 是一种  # 边缘 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 提升屏幕阅读器对“m”时间单位的播报准确性:HTML与CSS组合解决方案  极兔快递快件信息查询系统 极兔快递官网运单号追踪  CSS布局中意外空白:解决padding-top导致的顶部间距问题  抖音网页版平台入口 抖音网页版官网在线访问教程  Python:递归比较文件夹内容并找出特定类型文件的差异  在J*a中如何捕获IndexOutOfBoundsException_索引越界异常防护方法说明  Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求  俄罗斯Yandex免登录入口_Yandex搜索引擎官网一键直达  写好的html代码怎么运行出来_运行写好的html代码方法【教程】  C++如何生成随机数_C++ random库使用方法与范围设置  怎样把文件彻底粉碎无法恢复_Windows下安全删除敏感数据【隐私保护】  poki免费入口快捷访问 poki人气小游戏直接玩站点  外媒分析《GTA6》定价:卖100美元可以但真没必要!  c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解  在J*a中如何开发简易电子商务商品管理系统_商品管理系统项目实战解析  QQ邮箱官方网页版登录 QQ邮箱个人邮箱快速访问  黑鲨3Pro怎样在相册开漫画风滤镜_iPhone黑鲨3Pro相册开漫画风滤镜【趣味滤镜】  12306选座怎么选到商务座_12306商务座选择与配置说明  mysql备份恢复性能优化_mysql备份恢复性能优化方法  怎么去除衣服上的口红印_生活小妙招教你用酒精轻松擦除  谷歌浏览器无痕模式怎么开 Chrome开启无痕浏览设置方法【教程】  如何使用纯J*aScript判断Input元素是否在特定类容器内  漫蛙manwa2最新登录网址_漫蛙manwa2手机网页版入口  葱吃多了会怎样 葱吃多了会伤胃吗  QQ邮箱登录平台入口 QQ邮箱网页版邮箱官方入口  Go语言JSON解析深度指南:动态访问与结构体映射实践  PHP URL参数传递与500错误调试指南  护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?  PowerPoint如何制作滚动字幕结尾彩蛋_PowerPoint路径动画实现平滑滚动字幕效果  深入理解Go语言中Map值与方法接收器的交互:为什么需要临时变量  如何解决电商平台定制报价请求的“黑洞”问题,SprykerQuoteRequest模块助你提升客户体验与销售效率  QQ邮箱官网登录入口 QQ邮箱网页版邮箱快速登录  Mac怎么查看崩溃日志_Mac控制台错误报告分析  uc浏览器网页版入口 uc浏览器网页版最新网址  Win11怎么开启省电模式_Win11电池节电模式自动开启  如何仅使用CSS更改登录界面背景图像图标的颜色  抖音网页版快捷访问 抖音网页版网页版入口操作教程  搜狗浏览器如何使用密码生成器创建强密码 搜狗浏览器内置密码安全工具  ArchiveofOurOwn小说阅读-ArchiveofOurOwn同人作品访问链接  在J*aScript中复现SciPy的B样条拟合与求值:关键考量  yandex入口引擎手机版 yandex安卓版下载入口  J*aScript异步迭代器_j*ascript异步遍历  邮政编码查询不到怎么办_邮政编码查询不到的常见原因与对策  Lar*el表单中优雅地处理“返回”按钮以规避验证:最佳实践指南  J*aScript 字符串标签转换:使用正则表达式高效替换  Win10文件资源管理器“此电脑”分组怎么关 Win10恢复经典视图【技巧】  包子漫画官方网站阅读入口-包子漫画在线漫画官网直达链接  汽车之家官方网站官网入口_汽车之家网页版直接进入  初次安装JDK时环境变量如何正确配置_J*A_HOME与PATH设置规则讲解  MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复 

搜索