C++ Smart Pointers
裸指针(new/delete)的两大顽疾:忘记释放导致内存泄漏,重复释放或异常路径跳过释放导致未定义行为。智能指针用 RAII 把“获取即初始化”贯彻到指针上——构造时持有资源,析构时自动释放,从而让资源管理与控制流解耦。 C++11 后标准库提供三类智能指针(均在 <memory>):std::unique_ptr、std::shared_ptr、std::weak_ptr,加...
C++ Templates
📑 C++ 泛型编程系列:模板 | Type Traits | Concept 模板是 C++ 的编译期多态与元编程基石。同一份模板代码,编译器根据传入的类型生成不同实例,实现“一次编写,多类型复用”,且零运行时开销。模板把“类型”当作一等公民,在编译期进行计算与分发。 类比:模板是“代码模具”,注入不同类型(材料)压出不同实例(零件)。 模板的两大用途:泛型编程(容器、算法与类型...
C++ new & delete
C++ 的 new 和 delete 是动态内存核心,但现代代码中应避免裸用。理解其机制避免陷阱:new 分配内存+构造对象,delete 析构+释放内存。 Widget 示例类(全局唯一定义) 1234567891011121314#include <print>#include <format>class Widget {public: Widge...
C++ STL Allocator
Allocator 是 STL 容器与底层内存系统之间的抽象层:容器只负责对象构造与数据结构逻辑,内存的获取与归还交给 allocator。默认的 std::allocator 覆盖了绝大多数场景,但在高频分配、生命周期集中或需要内存审计的场景下,理解并定制这一层是最后的性能杠杆。本文梳理 allocator 的接口契约、自定义要点与 C++17 引入的 PMR,并用实测数据检验常见的性能假...
C++ Callable Objects
在 C++ 中,Callable Object(可调用对象) 指的是任何可以像函数一样被调用的事物。简单来说,就是任何可以使用 () 运算符(Function Call Operator)的对象。 在现代 C++(C++11 及以后)中,可调用对象的概念非常重要,因为它是 STL 算法、线程(std::thread)以及回调机制的核心。 C++ 中的可调用对象主要分为以下 5 类。 普通函...
C++ namespace
C++命名空间是语言的核心特性之一,用于解决名字冲突问题,尤其在大项目或使用多个库时。基于最新C++23标准,命名空间用法稳定,但结合模块(modules)使用更高效。下面直击要害,逐一拆解,包括[inline namespace]、匿名命名空间和命名空间别名。 参考:[cppreference.com] 基本用法:声明与定义 命名空间通过namespace关键字声明,内容可以分散在多个文...
C++ 三路比较 (Three-way Comparison)
简介 C++20 引入了三路比较运算符 <=>,也被称为"宇宙飞船运算符"(spaceship operator)。这个运算符可以一次性确定两个对象之间的所有比较关系(小于、等于、大于),大大简化了比较运算符的实现。 传统比较运算符的问题 在 C++20 之前,如果我们想为一个自定义类型实现完整的比较运算符,需要分别实现六个运算符: 1234567891011...







