【用法】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);

 

  

 

 

 

C++ 智能指针 unique_ptr 详解与示例_彼此当年少,莫负好时光-CSDN博客_c++ unique_ptr

posted @   hik_wxy  阅读(535)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示