第3章 高频C++/C#面试题与回答框架:内存管理、多态、虚函数、垃圾回收、引用与指针

本章覆盖游戏客户端面试中 C++/C# 的六大核心考点:内存管理、多态、虚函数、垃圾回收、引用与指针。每个考点都配有「考察意图 → 回答路径 → 示例话术 → 追问防御」的闭环框架,帮助你在 3 分钟内给出面试官想要的深度回答。

知识结构概览

主题 核心机制 高频工具 / 概念 面试常见切入角度
内存管理 RAII、智能指针 unique_ptr / shared_ptr / weak_ptr 内存泄漏防范、循环引用
多态与虚函数 vtable 动态绑定 虚函数表、vptr、抽象类 多态实现原理、构造调用
C# 垃圾回收 分代回收、标记-压缩 GC 代际、对象池、析构函数 GC 对帧率的影响、优化手段
引用与指针 值类型 vs 引用类型 C++ 引用、C# ref / out 对比选型、安全性、性能差异
内存管理 C++ 内存分配 多态机制 C# 内存机制 RAII + 智能指针 vtable + 动态绑定 GC + 值/引用类型

▲ 回答框架图:从「内存管理」出发,按语言路线组织回答要点

📌 问答卡片 1 · C++ 内存管理

面试问题:请谈谈 C++ 中的内存管理方式,如何有效防止内存泄漏?

面试官考察点:

  • 是否理解栈与堆的本质区别
  • 是否掌握 RAII 资源管理思想
  • 能否熟练运用智能指针并说明其适用场景
  • 对循环引用等隐蔽泄漏是否有防范意识

回答框架:

  1. 区分栈与堆:栈上对象自动管理,堆上对象需手动释放
  2. 引入 RAII:资源获取即初始化,将资源生命周期绑定到栈对象
  3. 智能指针选型:unique_ptr 独占所有权,shared_ptr 共享引用,weak_ptr 打破循环
  4. 避免裸指针:生产代码中杜绝裸 new/delete,统一使用智能指针

简短示例回答:

C++ 内存管理核心是栈与堆的区分:栈上对象自动析构,堆上对象需手动释放。我严格遵循 RAII 原则,将堆资源封装在栈对象中。对于动态对象,优先使用 unique_ptr 实现独占所有权;共享场景用 shared_ptr,并搭配 weak_ptr 打破循环引用。杜绝裸 new/delete,从架构层面消除内存泄漏。

可能追问:

  • shared_ptr 的引用计数如何保证线程安全?
  • C++ 中引用和指针在语法和安全性上有哪些本质区别?
  • 自定义删除器在什么场景下必须使用?

⚠️ 避坑提醒:不要过度使用 shared_ptr,避免循环引用导致内存泄漏。另外,shared_ptr 的引用计数操作是原子性的,但对象本身的线程安全仍需自行保证。

虚函数实现原理 vtable 结构? ← 上一章 📖 返回目录 下一章 →