一个轻量级C++智能指针实现库,包含UniquePointer、SharedPointer和WeakPointer的核心功能实现,支持C++20及以上标准。
-
现代智能指针全家桶
UniquePointer:独占所有权,支持自定义删除器SharedPointer:引用计数共享所有权,支持多态和自定义删除器WeakPointer:打破循环引用的观察指针
-
性能优化
UniquePointer空基类优化(EBCO),消除无状态删除器的额外存储开销MakeShared单次内存分配优化(控制块与对象内存合并)
-
进阶功能
MakeUnique函数支持enable_shared_from_this基类支持- 原子引用计数操作(基于
std::atomic) - 支持自定义删除器(支持函数指针/仿函数)
.
├── docs/
│ ├── Doxyfile # Doxygen配置文件
│ └── MainPage.dox # Doxygen文档主页面
├── include/
│ ├── SharedPointer.hpp # SharedPointer/WeakPointer及相关模板类
│ └── UniquePointer.hpp # UniquePointer及相关模板类
├── tools
│ ├── generate_coverage.sh # 生成单元覆盖率脚本
| ├── generate_docs.sh # 生成本地文档
│ └── run_unitest.sh # 运行单元测试脚本
├── unitest/
| ├── common/
| | └── utility.hpp # 单元测试公共头文件
│ ├── main.cpp # Google-Test入口
│ ├── test_sharedpointer.cpp # SharePointer单元测试文件
│ ├── test_uniquepointer.cpp # UniquePointer单元测试文件
│ └── test_weakpointer.cpp # WeakPointer单元测试文件
├── CMakeLists.txt # 项目构建文件
├── LICENSE # MIT许可证
└── README.md # 文档文件
环境要求:CMake 3.10+, 支持C++20的编译器
# run unitest cases
$ cd tools
$ ./run_unitest.sh# generate coverage file
$ cd tools
$ ./generate_coverage
# see code coverage report in build/coverage_report/index.html# generate doxygen docs
$ cd tools
$ ./generate_docs.sh
# see doxygen page in http://0.0.0.0:8000/当前为开发中版本,已实现除make_shared和make_unique以外的全部功能。单元测试的行覆盖率大于95%,且引用计数的增加和减少符合线程安全标准。代码通过valgrind检测,无内存泄漏问题。且具有完整的doxygen文档,可使用脚本一键生成
欢迎通过Issue提交建议或Pull Request参与改进!请确保:
- 代码风格与现有代码保持一致
- 新增功能需附带测试用例
- 通过所有现有单元测试并确保行覆盖率不低于90%
- 对新增代码编写文档