【用法】unique_ptr(独占)
unique_ptr 是 C++ 11 提供的用于防止内存泄漏的智能指针中的一种实现。它具有->
和*
运算符重载符,因此它可以像普通指针一样使用。
独享所有权
unique_ptr对象始终是关联的原始指针的唯一所有者。我们无法复制unique_ptr对象,但可以转移。
由于每个unique_ptr对象都是原始指针的唯一所有者,因此在其析构函数中它直接删除关联的指针,不需要任何参考计数。
用法
1. 创建一个unique_ptr对象:
std::unique_ptr<Task> taskPtr( new Task(0) );
或
std::unique_ptr<Task> taskPtr( new std::unique_ptr<Task>::element_type(0) );
或(C++14引入)
std::unique_ptr<Task> taskPtr = std::make_unique<Task>(0);
2. 获取被管理的指针
Task* pTask = taskPtr.get();
3. 重置unique_ptr对象
将释放delete关联的原始指针,并置unique_ptr对象为空。
taskPtr.reset();
4. unique_ptr对象不可复制
//错误,不可复制 std::unique_ptr<Task> taskPtr2 = taskPtr1;
5. 转移unique_ptr对象
std::unique_ptr<Task> taskPtr1( new Task(0) ); //转移,转移之后,taskPtr1将变为空 std::unique_ptr<Task> taskPtr2 = std::move(taskPtr1);
6. 释放关联的原始指针
在unique_ptr对象上调用 release()
将释放其关联的原始指针的所有权,并返回原始指针。这里是释放所有权,并没有delete原始指针,reset()才
会delete原始指针。
Task* pTask = taskPtr.release();
错误用法
std::unique_ptr<Task> taskPtr = new Task(0);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构