Appearance
智能指针(Smart Pointers)专题
一句话总览
智能指针是 RAII(资源获取即初始化)思想的产物:把「裸指针 + 手动 delete」封装进对象,让内存(或任意资源)随对象生命周期自动释放。C++11 起标准库提供 unique_ptr、shared_ptr、weak_ptr。
三类智能指针速览
| 智能指针 | 所有权 | 特点 | 代价 / 限制 |
|---|---|---|---|
unique_ptr | 独占 | 轻量、无额外内存开销、可自定义删除器 | 不可拷贝,只可 move |
shared_ptr | 共享 | 引用计数,最后一个释放时销毁对象 | 控制块开销 + 原子计数,有循环引用风险 |
weak_ptr | 观察 | 不增加引用计数,可升级为 shared(lock) | 专破循环引用 / 缓存观测 |
高频问题清单(自测)
- 为什么需要智能指针?RAII 是什么?
unique_ptr能否拷贝?如何转移所有权?shared_ptr引用计数存在哪、是否线程安全?weak_ptr的作用?如何打破循环引用?- 手写 shared_ptr / unique_ptr(高频压轴题)
shared_ptr的 control block 布局?make_shared优点?- 智能指针 + 裸指针混用有什么坑?
enable_shared_from_this为什么存在?- 自定义删除器怎么传?(unique_ptr 删除器在每个对象、shared_ptr 在控制块)
- 智能指针会不会导致内存泄漏?(会——循环引用,见 weak_ptr)
子文档
| 文件 | 内容 |
|---|---|
unique_ptr.md | 独占所有权、move、删除器、手写 |
shared_ptr.md | 引用计数、控制块、make_shared、线程安全、手写 |
weak_ptr.md | 循环引用、lock、expired |
handwrite.md | 手写实现合集 + 删除器 |