基本用法
创建 std::unique_ptr
创建一个 std::unique_ptr
实例,可以通过显式调用构造函数:
#include <memory> std::unique_ptr<int> myPtr(new int(10)); // Okay
禁止复制
std::unique_ptr
禁止复制,因为它是独占所有权的智能指针,这保证了资源不会被多个指针共享:
#include <memory> std::unique_ptr<int> myPtr(new int(10)); std::unique_ptr<int> myOtherPtr = myPtr; // 错误:不能复制 unique_ptr
使用移动语义
std::unique_ptr
支持 C++11 的移动语义,通过 std::move
可以将资源的所有权从一个 unique_ptr
转移到另一个 unique_ptr
:
#include <memory> #include <utility> // for std::move std::unique_ptr<int> myPtr(new int(10)); // Okay std::unique_ptr<int> myOtherPtr = std::move(myPtr); // Okay, 资源现在在 myOtherPtr 中
现在 myPtr
不再拥有资源,并且变为空(没有指向任何对象)。<