C++ — 避免常见 C++ 错误

C++

v1.0.11.2k 次下载2👤 ivangdavila📅 2026/04/16
⬇ 下载

简介

此技能提供 C++ 指南,帮助开发者避免常见错误,如内存泄漏、悬垂引用、未定义行为和所有权混淆。包含 C++ 最佳实践和参考文档。

技能文档

--- name: C++ slug: cpp version: 1.0.1 description: 编写安全的 C++ 代码,避免内存泄漏、悬空指针、未定义行为和所有权混淆。 metadata: {"clawdbot":{"emoji":"⚡","requires":{"bins":["g++"]},"os":["linux","darwin","win32"]}} --- ## 快速参考 | 主题 | 文件 | |-------|------| | RAII、智能指针、new/delete | `memory.md` | | 裸指针、引用、nullptr | `pointers.md` | | 三/五/零法则、继承、虚函数 | `classes.md` | | 容器、迭代器、算法 | `stl.md` | | 模板、SFINAE、concepts | `templates.md` | | 线程、互斥锁、原子操作 | `concurrency.md` | | C++11/14/17/20、移动语义 | `modern.md` | | 未定义行为陷阱 | `ub.md` | ## 关键规则 - 裸 `new` 没有 `delete` 会导致泄漏 — 使用 `std::unique_ptr` 或 `std::make_unique` - 返回局部变量的引用 — 未定义行为,对象在返回时被销毁 - C 字符串使用 `==` 比较的是指针 — 使用 `std::string` 或 `strcmp()` - 有符号整数溢出是未定义行为 — 不像无符号那样回绕 - 基类需要虚析构函数 — 否则派生类析构函数会被跳过 - `std::move` 不会实际移动 — 它只是转换为右值引用,启用移动语义 - 被移动后的对象处于有效但未指定状态 — 重新赋值前不要使用 - 非原子操作上的数据竞争是未定义行为 — 使用 `std::mutex` 或 `std::atomic` - `vector` 不是真正的容器 — 返回代理对象,使用 `deque` - `map[key]` 会在键不存在时插入默认值 — 使用 `find()` 或 `contains()` 检查 - 花括号初始化 `{}` 防止窄化转换 — `int x{3.5}` 报错,`int x(3.5)` 截断 - `push_back` 可能使迭代器失效 — vector 可能重新分配内存 - `string_view` 不拥有数据 — 底层字符串必须比视图存活更久

安装命令

clawhub install cpp