std::unique_ptr是C++11引入的独占式智能指针,具有唯一所有权、禁止拷贝、仅支持移动、RAII自动释放等核心特性,推荐用make_unique创建,支持自定义删除器、数组特化及安全的所有权转移。

std::unique_ptr 是 C++11 引入的独占式智能指针,核心特点是“唯一所有权”——同一时间只能有一个 unique_ptr 指向某块资源,禁止拷贝,只支持移动。它通过 RAII 自动释放资源,是管理动态内存最安全、最轻量的方式之一。
创建与初始化
不能用裸指针直接赋值,必须显式构造或使用 make_unique(推荐):
-
推荐方式:std::unique_ptr
p = std::make_unique —— 异常安全,一步完成内存分配和对象构造(42); - 手动构造:std::unique_ptr
p(new int(42)); —— 不推荐,若 new 成功但构造函数抛异常,会内存泄漏 - 空指针:std::unique_ptr
p; 或 std::unique_ptr p{nullptr}; - 自定义删除器:std::unique_ptr
fp(fopen("a.txt", "r"), &fclose);
所有权转移(移动语义)
unique_ptr 禁止拷贝,但可安全转移所有权:
- 用 std::move 显式移交:auto p2 = std::move(p1); —— 此后 p1 变为空,p2 持有原资源
- 函数传参/返回时自动触发移动:传入 unique_ptr&& 参数,或直接 return 一个局部 unique_ptr
- 容器中存储:std::vector<:unique_ptr>> vec; vec.push_back(std::make_unique
(100)); —— push_back 接收右值,自动移动
访问与释放
像普通指针一样使用,但不支持隐式转换为 raw pointer:
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~