Skip to content

记录C++造轮子。通过手动实现各种C++常用组件和库,深入理解C++底层原理和设计模式

Notifications You must be signed in to change notification settings

shizhengLi/cpp-wheel-impl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

C++ 造轮子实现计划

项目概述

本项目旨在通过手动实现各种C++常用组件和库,深入理解C++底层原理和设计模式。项目遵循小步快跑的开发原则,每个组件都必须通过单元测试和编译验证后才能进行下一步。

设计原则

核心原则

  1. 小步快跑:每个功能模块都要独立实现和测试
  2. 测试驱动:先写测试用例,再实现功能
  3. 100%通过率:所有测试必须通过才能进行下一步
  4. 编译验证:代码必须能正常编译,无警告和错误
  5. 文档先行:每个模块都有详细的实现文档

开发流程

  1. 分析需求和技术要点
  2. 编写测试用例
  3. 实现核心功能
  4. 运行单元测试(必须100%通过)
  5. 编译验证(无警告无错误)
  6. 如有集成测试,运行集成测试
  7. 编写实现文档
  8. 进入下一个模块

项目结构

cpp-wheel-impl/
├── stl-impl/       # STL从零实现 ✅ 已完成
│   ├── include/    # STL头文件
│   ├── test/       # 测试文件
│   ├── README.md   # STL实现文档
│   └── build/      # 构建目录
├── impl/           # 基础组件实现 ✅ 已完成
│   ├── unique_ptr/ # 智能指针
│   ├── shared_ptr/ # 共享指针
│   ├── function/   # 函数包装器
│   ├── optional/   # 可选值容器
│   ├── any/        # 类型容器
│   ├── variant/    # 变体类型
│   ├── tuple/      # 元组类型
│   └── thread/     # 线程库
├── notes/          # 详细文档
├── README.md       # 项目说明
└── C++_轮子实现计划.md  # 本文档

轮子实现列表

基础篇:入门级组件

1. unique_ptr 智能指针

难度:⭐⭐☆☆☆
学习目标:理解RAII和移动语义

实现要点

  • 模板类设计
  • 移动构造和移动赋值
  • 删除拷贝构造和拷贝赋值
  • 重载*和->操作符
  • reset()和release()方法
  • 自定义删除器

测试要点

  • 基本功能测试
  • 移动语义测试
  • 所有权转移测试
  • 自定义删除器测试

实现位置impl/unique_ptr/
文档位置notes/unique_ptr.md


2. string 字符串类

难度:⭐⭐☆☆☆
学习目标:理解动态内存管理和字符串操作

实现要点

  • 动态内存分配
  • 深拷贝和浅拷贝
  • 常用字符串操作(append、substr、find等)
  • 操作符重载(+、+=、==、!=等)
  • 迭代器支持

测试要点

  • 构造和析构测试
  • 字符串操作测试
  • 内存管理测试
  • 边界条件测试

实现位置impl/string/
文档位置notes/string.md


3. vector 动态数组

难度:⭐⭐⭐☆☆
学习目标:理解动态数组扩容机制

实现要点

  • 动态扩容策略
  • 内存连续性
  • 迭代器实现
  • 元素访问和修改 -容量管理(size/capacity/reserve)

测试要点

  • 基本操作测试
  • 扩容机制测试
  • 迭代器测试
  • 异常安全测试

实现位置impl/vector/
文档位置notes/vector.md


4. shared_ptr 共享指针

难度:⭐⭐⭐☆☆
学习目标:理解引用计数和共享所有权

实现要点

  • 引用计数控制块
  • 线程安全的引用计数
  • 循环引用问题
  • weak_ptr支持
  • 自定义删除器

测试要点

  • 引用计数测试
  • 所有权共享测试
  • 线程安全测试
  • 循环引用测试

实现位置impl/shared_ptr/
文档位置notes/shared_ptr.md


进阶篇:中级组件

5. function 函数包装器

难度:⭐⭐⭐⭐☆
学习目标:理解类型擦除和多态

实现要点

  • 类型擦除技术
  • 函数指针、lambda、成员函数统一包装
  • 小对象优化(Small Object Optimization)
  • 拷贝和移动语义

测试要点

  • 各种函数类型测试
  • 性能测试
  • 内存使用测试
  • 异常安全测试

实现位置impl/function/
文档位置notes/function.md


6. any 类型容器

难度:⭐⭐⭐⭐☆
学习目标:理解类型安全和运行时多态

实现要点

  • 类型擦除
  • 内存管理
  • 拷贝和移动语义
  • 类型查询(cast操作)

测试要点

  • 基本功能测试
  • 类型安全测试
  • 内存管理测试
  • 性能测试

实现位置impl/any/
文档位置notes/any.md


7. optional 可选值容器

难度:⭐⭐⭐☆☆
学习目标:理解可选值和异常安全

实现要点

  • 联合体(union)存储
  • 值语义
  • 异常安全
  • 操作符重载

测试要点

  • 基本功能测试
  • 异常安全测试
  • 性能测试
  • 边界条件测试

实现位置impl/optional/
文档位置notes/optional.md


8. variant 变体类型

难度:⭐⭐⭐⭐☆
学习目标:理解变体类型和访问者模式

实现要点

  • 变体类型存储
  • 类型安全访问
  • 访问者模式
  • 内存管理

测试要点

  • 类型安全测试
  • 访问者模式测试
  • 内存管理测试
  • 异常安全测试

实现位置impl/variant/
文档位置notes/variant.md


9. memory_pool 内存池

难度:⭐⭐⭐⭐☆
学习目标:理解内存管理和性能优化

实现要点

  • 固定大小内存分配
  • 内存块管理
  • 线程安全设计
  • 性能优化

测试要点

  • 内存分配测试
  • 性能测试
  • 线程安全测试
  • 内存泄漏测试

实现位置impl/memory_pool/
文档位置notes/memory_pool.md


高级篇:复杂组件

10. thread_pool 线程池

难度:⭐⭐⭐⭐⭐
学习目标:理解多线程和任务调度

实现要点

  • 线程管理
  • 任务队列
  • 任务调度策略
  • 线程同步
  • 异常处理

测试要点

  • 基本功能测试
  • 性能测试
  • 线程安全测试
  • 异常处理测试

实现位置impl/thread_pool/
文档位置notes/thread_pool.md


11. epoll_event_loop 事件循环

难度:⭐⭐⭐⭐⭐
学习目标:理解IO多路复用和事件驱动

实现要点

  • epoll系统调用
  • 事件驱动架构
  • 定时器管理
  • 异步IO处理

测试要点

  • 基本功能测试
  • 性能测试
  • 并发测试
  • 内存泄漏测试

实现位置impl/epoll_event_loop/
文档位置notes/epoll_event_loop.md


12. rpc_framework RPC框架

难度:⭐⭐⭐⭐⭐
学习目标:理解分布式系统和网络编程

实现要点

  • 序列化/反序列化
  • 网络通信
  • 服务注册与发现
  • 负载均衡
  • 超时处理

测试要点

  • 基本功能测试
  • 性能测试
  • 网络异常测试
  • 序列化测试

实现位置impl/rpc_framework/
文档位置notes/rpc_framework.md


13. json_parser JSON解析器

难度:⭐⭐⭐⭐⭐
学习目标:理解解析器设计和状态机

实现要点

  • 词法分析
  • 语法分析
  • AST构建
  • 错误处理
  • 内存管理

测试要点

  • 解析正确性测试
  • 性能测试
  • 错误处理测试
  • 内存泄漏测试

实现位置impl/json_parser/
文档位置notes/json_parser.md


14. regex_engine 正则表达式引擎

难度:⭐⭐⭐⭐⭐
学习目标:理解正则表达式和有限状态机

实现要点

  • NFA/DFA构建
  • 正则表达式解析
  • 模式匹配算法
  • 优化技术

测试要点

  • 基本功能测试
  • 性能测试
  • 边界条件测试
  • 内存使用测试

实现位置impl/regex_engine/
文档位置notes/regex_engine.md


15. coroutine 协程库

难度:⭐⭐⭐⭐⭐
学习目标:理解协程和异步编程

实现要点

  • 协程上下文切换
  • 调度器设计
  • 异步IO集成
  • 内存管理

测试要点

  • 基本功能测试
  • 性能测试
  • 内存泄漏测试
  • 并发测试

实现位置impl/coroutine/
文档位置notes/coroutine.md


实现顺序建议

第一阶段:基础组件(1-2周)

  1. unique_ptr - 理解智能指针基础
  2. string - 掌握动态内存管理
  3. vector - 学习容器设计模式

第二阶段:中级组件(2-3周)

  1. shared_ptr - 理解引用计数
  2. optional - 学习可选值处理
  3. function - 掌握类型擦除

第三阶段:高级组件(3-4周)

  1. any/variant - 理解变体类型
  2. memory_pool - 学习内存优化
  3. thread_pool - 掌握多线程编程

第四阶段:复杂系统(4-6周)

  1. epoll_event_loop - 理解事件驱动
  2. json_parser - 学习解析器设计
  3. rpc_framework - 掌握分布式系统

第五阶段:高级主题(2-3周)

  1. regex_engine - 理解模式匹配
  2. coroutine - 学习异步编程

已完成的项目

STL 从零实现 ✅ 已完成

完成时间: 2025年8月 完成状态: 完整的STL实现,包含所有核心组件

已实现组件:

  • ✅ 基础工具: allocator, iterator, functional
  • ✅ 序列容器: vector, list, deque
  • ✅ 容器适配器: stack, queue, priority_queue
  • ✅ 关联容器: set, multiset, map, multimap (红黑树实现)
  • ✅ 无序容器: unordered_set, unordered_multiset, unordered_map, unordered_multimap (哈希表实现)
  • ✅ 算法库: 完整的STL算法实现

技术亮点:

  • 🚀 真正的重复元素支持: unordered_multiset 和 unordered_multimap 完全支持重复元素
  • 🚀 哈希表优化: 实现了支持重复元素的哈希表 insert_multi_impl() 方法
  • 🚀 完整测试覆盖: 17个测试文件,243个测试用例全部通过
  • 🚀 红黑树实现: 完整的红黑树数据结构,支持所有关联容器
  • 🚀 算法优化: 实现了排序、查找、堆算法等核心算法

项目位置: stl-impl/ 目录 详细文档: stl-impl/README.md

基础组件实现 ✅ 已完成

完成时间: 2025年8月 已实现组件:

  • ✅ unique_ptr - 智能指针
  • ✅ shared_ptr - 共享指针
  • ✅ function - 函数包装器
  • ✅ optional - 可选值容器
  • ✅ any - 类型容器
  • ✅ variant - 变体类型
  • ✅ tuple - 元组类型
  • ✅ thread - 线程库

测试状态: 所有组件都有完整的单元测试覆盖

测试策略

单元测试要求

  • 每个公共函数都要有测试用例
  • 覆盖正常流程和异常流程
  • 边界条件必须测试
  • 内存泄漏必须检测

集成测试要求

  • 多个组件协同工作测试
  • 性能基准测试
  • 压力测试
  • 兼容性测试

测试工具

  • Google Test框架
  • Valgrind内存检测
  • GDB调试
  • 性能分析工具

文档规范

实现文档要求

  • 设计思路和原理说明
  • 核心算法和数据结构
  • 接口说明和使用示例
  • 性能分析和优化建议
  • 常见问题和解决方案

代码注释要求

  • 类和函数的详细注释
  • 复杂算法的步骤说明
  • 关键代码的逻辑解释
  • 边界条件的处理说明

开发环境

编译器要求

  • GCC 7+ 或 Clang 6+
  • C++17标准支持
  • 警告级别:-Wall -Wextra -Werror

构建系统

  • CMake 3.10+
  • 支持Debug和Release构建
  • 自动化测试集成

依赖库

  • Google Test
  • 线程库(pthread)
  • 系统调用库

质量保证

代码质量

  • 遵循C++核心准则
  • 代码风格统一
  • 无内存泄漏
  • 无线程安全问题

性能要求

  • 时间复杂度符合预期
  • 空间复杂度合理
  • 无性能瓶颈
  • 内存使用效率高

健壮性要求

  • 异常处理完善
  • 边界条件处理
  • 错误恢复能力
  • 资源清理正确

总结

这个C++造轮子项目涵盖了从基础到高级的多个重要组件,通过实际实现这些组件,可以深入理解C++的底层原理和设计模式。每个组件都遵循严格的质量标准,确保代码的正确性和性能。

当前成就

已完成的主要项目:

  • STL从零实现: 完整的STL库实现,包含所有核心容器和算法
  • 基础组件实现: 包含智能指针、函数包装器、变体类型等核心组件

技术亮点:

  • 🚀 真正的重复元素支持: unordered_multiset 和 unordered_multimap 完全支持重复元素
  • 🚀 完整的测试覆盖: 17个测试文件,243个测试用例全部通过
  • 🚀 高级数据结构: 红黑树、哈希表等核心数据结构实现
  • 🚀 现代C++特性: 模板编程、移动语义、异常安全等

学习收获

通过这个项目,你将掌握:

  • C++高级特性和设计模式
  • 内存管理和性能优化
  • 多线程和并发编程
  • 系统编程和网络编程
  • 解析器和编译器技术
  • 数据结构和算法实现
  • 软件工程最佳实践

记住,小步快跑,测试驱动是这个项目的核心理念,确保每一步都走得扎实,最终才能构建出高质量的C++组件库。

About

记录C++造轮子。通过手动实现各种C++常用组件和库,深入理解C++底层原理和设计模式

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published