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

浙公网安备 33010602011771号