贝利信息

c++如何使用智能指针_c++ unique_ptr与shared_ptr内存管理【详解】

日期:2026-01-20 00:00 / 作者:裘德小鎮的故事
结论:用 std::unique_ptr 管理独占资源,用 std::shared_ptr 管理共享资源;必须用 make_unique/make_shared 创建,禁止裸 new;unique_ptr 可移转为 shared_ptr,反之不行;注意循环引用、所有权边界和数组删除器。

直接说结论:用 std::unique_ptr 管理独占资源,用 std::shared_ptr 管理共享资源;别混用裸指针和智能指针初始化,也别用 new 直接构造后赋值给 shared_ptr —— 容易 double-delete 或内存泄漏。

什么时候该用 unique_ptr

当你明确知道某块内存只属于一个所有者,且生命周期由当前作用域或对象严格控制时。典型场景包括:函数返回动态对象、容器里存指针、RAII 封装资源(如文件句柄、socket)。

什么时候该用 shared_ptr

当多个对象/模块需要共同持有同一块内存,并且谁都不想“强制决定”销毁时机时。常见于观察者模式、缓存、异步回调中跨线程传递数据。

unique_ptrshared_ptr 能相互转换吗?

可以,但有严格限制:

最容易被忽略的坑

不是语法写错,而是对“所有权边界”没想清楚: