1.final 与 override 关键字这两个关键字专门用于类继承 虚函数重写作用是编译期强制校验语法杜绝隐藏 bug是 C 多态的安全规范。1. override强制检查「虚函数重写」核心作用1.只能修饰子类的虚函数2.告诉编译器这个函数必须是重写基类的虚函数3.如果函数名 / 参数 / 返回值写错直接编译报错传统写法不会报错会变成新函数导致多态失效。语法:// 子类虚函数末尾加 override void 函数名(参数) override;代码示例:#include iostream using namespace std; // 基类 class Base { public: virtual void show() { cout Base\n; } }; // 子类 class Derive : public Base { public: // ✅ 正确重写基类虚函数override 校验通过 void show() override { cout Derive\n; } // ❌ 错误函数名写错shou编译器直接报错 // void shou() override { cout Derive\n; } };必须用 override它是虚函数重写的「保险栓」彻底避免因手误导致的多态失效。2. final禁止重写 / 禁止继承有两种用法语义完全不同用法 1修饰虚函数 → 禁止子类重写class Base { public: // 该虚函数无法被任何子类重写 virtual void func() final { cout final func\n; } }; class Derive : public Base { public: // ❌ 报错无法重写 final 函数 // void func() override {} };用法 2修饰类 → 禁止该类被继承:// 最终类不能有子类 class FinalClass final { }; // ❌ 报错无法继承 final 类 // class Son : public FinalClass { };2.智能指针 (Smart Pointers)C 用 new 动态分配的内存必须手动 delete否则会内存泄漏。智能指针封装裸指针的类离开作用域时自动调用 delete 释放内存无需手动管理从根源避免泄漏。1.std::unique_ptr独占式智能指针最常用特性同一时间只有一个指针拥有对象所有权禁止拷贝只能移动转移所有权性能和裸指针完全一致无额外开销默认优先使用它用法示例#include iostream #include memory using namespace std; int main() { // 1. 创建 unique_ptr管理 int 对象 unique_ptrint p1(new int(10)); cout *p1 endl; // 10 // 2. 移动语义转移所有权p1 变为空 unique_ptrint p2 move(p1); cout *p2 endl; // 10 // 3. 离开作用域自动释放内存无需 delete return 0; }2. std::shared_ptr共享式智能指针特性多个指针共享同一个对象内部维护引用计数拷贝 → 计数 1析构 → 计数 - 1计数 0 → 自动释放内存有轻微性能开销维护计数用法示例int main() { // 创建 shared_ptr shared_ptrint p1(new int(20)); cout 计数 p1.use_count() endl; // 1 // 拷贝共享所有权 shared_ptrint p2 p1; cout 计数 p1.use_count() endl; // 2 // 所有指针失效后内存自动释放 return 0; }3. std::weak_ptr弱引用指针解决循环引用核心问题shared_ptr 会出现循环引用两个对象互相持有对方的 shared_ptr计数永远不为 0内存泄漏。特性不拥有对象所有权不增加引用计数仅作为「观察者」监测对象是否存活必须配合 shared_ptr 使用。核心方法expired()判断对象是否已释放lock()转为 shared_ptr 访问对象总结1.优先用 std::make_unique/std::make_shared 创建智能指针更安全、高效auto p make_uniqueint(10); auto sp make_shareddouble(3.14);2.不要混用裸指针和智能指针3.不要手动 delete 智能指针管理的内存4.能用 unique_ptr 绝不用 shared_ptr性能最优。谢谢