div style="font-size:1px;opacity:0.01;line-height:1px;"> 趣科技 机圈观察员 茄考网 茄录网 海印网 雷鹃网 鹃朝网 互联网观察员 评测官 海印网

C++智能指针如何使用?C++ smart pointer用法全解析【现代C++】

admin 百科 19
智能指针是现代C++管理动态内存的核心工具,通过RAII自动释放资源避免内存泄漏和悬空指针;std::unique_ptr独占所有权、不可拷贝可移动;std::shared_ptr共享所有权、引用计数管理;std::weak_ptr观察共享对象、打破循环引用;需避免裸指针混用、错误构造及删除器不匹配等常见坑。

C++智能指针如何使用?C++ smart pointer用法全解析【现代C++】-第1张图片-佛山资讯网

智能指针是现代 C++ 管理动态内存的核心工具,它用对象封装裸指针,自动在合适时机释放资源,从根本上避免内存泄漏和悬空指针。关键不是“要不要用”,而是“怎么选、怎么写、怎么避坑”。

三种智能指针各司其职

std::unique_ptr 表示独占所有权:同一时间只能有一个 unique_ptr 指向某块内存,不可拷贝,但可移动。适合局部资源管理、工厂函数返回、容器中存储独占对象。

  • 初始化推荐用 std::make_unique<t>(args...)</t>(C++14 起),避免裸 new 和异常安全问题
  • 想转移所有权?用 std::move(ptr),原指针自动变为空
  • 需要数组?用 std::unique_ptr<int></int>,析构时自动调用 delete[]

shared_ptr 用于共享所有权

std::shared_ptr 通过引用计数实现多处共享访问。只要还有一个 shared_ptr 指向对象,对象就不会被销毁。适合缓存、观察者、跨模块传递资源等场景。

  • 优先用 std::make_shared<t>(args...)</t> 构造——它把控制块和对象内存一起分配,更高效且异常安全
  • 慎用裸指针构造(如 shared_ptr<int>(new int(42))</int>):可能因 new 成功而 make_shared 失败导致内存泄漏
  • 循环引用?用 std::weak_ptr 打破。比如 A 持有 B 的 shared_ptr,B 也持有 A 的 shared_ptr → 引用计数永不归零 → 内存泄漏

weak_ptr 是 shared_ptr 的“观察者”

std::weak_ptr 不增加引用计数,只观察 shared_ptr 是否还有效。它不能直接解引用,必须先调用 lock() 获得一个临时 shared_ptr,检查是否非空再使用。

标签: 工具 ai c++ red

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~

趣科技 机圈观察员 茄考网 茄录网 海印网 雷鹃网 鹃朝网 互联网观察员 评测官
趣科技 机圈观察员 茄考网 茄录网 海印网 雷鹃网 鹃朝网 互联网观察员 评测官
div style="font-size:1px;opacity:0.01;line-height:1px;"> 趣科技 机圈观察员 茄考网 茄录网 海印网 雷鹃网 鹃朝网 互联网观察员 评测官 海印网