贝利信息

C++中的unique_ptr怎么用?(实现独占式资源管理)

日期:2026-01-09 00:00 / 作者:裘德小鎮的故事
unique_ptr 不能复制只能移动,出生即绑定资源、析构自动释放;最安全创建方式是 std::make_unique,支持数组和自定义删除器,访问前需判空,release/reset 控制释放,误用易致未定义行为。

unique_ptr 不能复制,只能移动;它一出生就绑定资源,析构时自动释放——这是它实现独占式资源管理的核心机制。

怎么创建和初始化 unique_ptr

最安全的方式是用 std::make_unique,它避免裸 new 可能引发的异常安全问题(比如构造参数中抛异常导致内存泄漏)。

为什么不能拷贝,只能移动

拷贝语义会破坏“独占”前提:两个指针同时指向同一块内存,谁析构谁负责?unique_ptr 的拷贝构造函数和 operator= 都被显式 delete 了。

如何安全访问和释放资源

直接解引用前务必检查是否为空,否则触发未定义行为;显式释放用 release(),但要自己承担后续释放责任。

常见误用和陷阱

最容易被忽略的是数组类型和自定义删除器的匹配问题——类型系统不会帮你校验删除器逻辑是否正确。

真正难的不是语法,而是判断“该不该用 unique_ptr”:如果资源需要共享或延迟释放,它就不是解;如果对象生命周期本就由栈管理,加一层 unique_ptr 反而增加间接性。它的价值只在“我确定只有我管这块内存,且我走的时候必须清掉”。