【用法】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 @ 2022-03-07 19:58  hik_wxy  阅读(578)  评论(0)    收藏  举报