Skip to content

智能指针(Smart Pointers)专题

一句话总览

智能指针是 RAII(资源获取即初始化)思想的产物:把「裸指针 + 手动 delete」封装进对象,让内存(或任意资源)随对象生命周期自动释放。C++11 起标准库提供 unique_ptrshared_ptrweak_ptr

三类智能指针速览

智能指针所有权特点代价 / 限制
unique_ptr独占轻量、无额外内存开销、可自定义删除器不可拷贝,只可 move
shared_ptr共享引用计数,最后一个释放时销毁对象控制块开销 + 原子计数,有循环引用风险
weak_ptr观察不增加引用计数,可升级为 shared(lock)专破循环引用 / 缓存观测

高频问题清单(自测)

  1. 为什么需要智能指针?RAII 是什么?
  2. unique_ptr 能否拷贝?如何转移所有权?
  3. shared_ptr 引用计数存在哪、是否线程安全?
  4. weak_ptr 的作用?如何打破循环引用?
  5. 手写 shared_ptr / unique_ptr(高频压轴题)
  6. shared_ptr 的 control block 布局?make_shared 优点?
  7. 智能指针 + 裸指针混用有什么坑?
  8. enable_shared_from_this 为什么存在?
  9. 自定义删除器怎么传?(unique_ptr 删除器在每个对象、shared_ptr 在控制块)
  10. 智能指针会不会导致内存泄漏?(会——循环引用,见 weak_ptr)

子文档

文件内容
unique_ptr.md独占所有权、move、删除器、手写
shared_ptr.md引用计数、控制块、make_shared、线程安全、手写
weak_ptr.md循环引用、lock、expired
handwrite.md手写实现合集 + 删除器

C++ 面试八股 · VitePress 版