C++ 中如何正确使用 delete 运算符

`delete` 是 C++ 动态内存管理里最容易写对、也最容易埋雷的基础操作。本文从 `delete` 与 `delete[]` 的区别讲起,再梳理栈、堆和智能指针的适用场景,最后总结安全释放内存时最常见的错误与更稳妥的现代 C++ 写法。

C++ 中如何正确使用 delete 运算符

C++ 如何用 string::erase 正确删除指定子串

`std::string::erase` 不能直接按“子串内容”删除,实际用法一定是先 `find` 定位,再用 `erase(pos, len)` 擦除。本文把删一个、删全部、处理重叠匹配和 `replace` 替代方案分开讲清,顺手避开 `npos`、单参数 `erase` 和索引更新这几个最常见的坑。 很多 C++ 初学者会把 `string::erase` 当成“按内容删除子串”的现成工具,结果不是编译不过,就是在 `npos`、单参数重载和循环删除上踩坑。

C++ 如何用 string::erase 正确删除指定子串

C++ 如何去掉字符串中所有的多余分隔符

在 C++ 里清理字符串中的连续空格、逗号或下划线,关键不在“替换某个字符”,而在“压缩一段分隔符”。这篇文章把 `std::regex_replace`、双指针原地处理和 `std::stringstream` 拆分重组放到同一张图里比较,并说明为什么 `replace_all` 一类第三方接口并不适合这个需求。

C++ 如何去掉字符串中所有的多余分隔符

C++ 如何验证输入文件名:从基础规则到完整实现

这篇文章围绕 C++ 中文件名校验展开,按“基础规则、验证分层、落地实现”重新梳理思路。重点保留长度限制、非法字符、扩展名检查、`std::filesystem` 与权限判断等关键代码与编译信息,便于直接用于实际项目。

C++ 如何验证输入文件名:从基础规则到完整实现

Linux 中 C++ 编译错误怎么解决

在 Linux 下用 g++ 编译 C++ 程序时,报错并不一定复杂,关键是按顺序定位:先读懂错误位置和类型,再排查语法、类型、头文件、库链接与编译器版本。本文结合一条常见的 `cout was not declared in this scope` 报错,整理出一套更适合日常排障的处理思路。

Linux 中 C++ 编译错误怎么解决

Clang 安装后怎么生成预处理文件

安装好 Clang 后,想单独拿到预处理结果,直接用 `clang -E` 或 `clang++ -E` 即可。它只负责展开头文件、替换宏、移除注释,不会继续进入编译阶段;关键区别在于 C 通常输出 `.i`,C++ 更推荐生成 `.ii`。 很多人装好 Clang 后,第一反应是“怎么把预处理结果单独导出来”,但真正上手时又常被 C/C++ 模式、头文件路径和输出方式这些细节卡住。

Clang 安装后怎么生成预处理文件

C++ 程序在 Linux 下如何调试:GDB 入门流程讲清楚

在 Linux 环境调试 C++ 程序时,GDB 仍是最常见也最实用的工具。本文按“编译带调试信息、进入 GDB、设置断点、查看变量、单步跟踪、定位崩溃”这条主线整理基础流程,并说明各条核心命令分别适合解决什么问题,方便刚接触命令行调试的读者快速建立一套可重复使用的排错方法。

C++ 程序在 Linux 下如何调试:GDB 入门流程讲清楚

macOS 下怎么正确编译 C++ 多线程程序

在 macOS 上编译 C++ 多线程程序,关键不是只开 C++11,而是同时把线程模型和链接链路配完整。本文围绕命令行、验证方法、CMake 配置和 Clang/libc++ 兼容性四个环节,说明为什么会报链接错、该怎样排查,以及哪些写法在 macOS 上最容易踩坑。

macOS 下怎么正确编译 C++ 多线程程序