一、C++基础核心(必问)

1. 指针 vs 引用

核心区别:

  • 指针:可以为空,可重新指向

  • 引用:必须初始化,不可更改绑定对象

👉 面试加分点:

  • 引用本质是“受限指针(语义层)”

2. const 关键字

常见问法:

const int a;
int const a;       // 一样
const int* p;      // 指向常量
int* const p;      // 常量指针
const int* const p;// 都不可变

👉 口诀:

const 看右边,没有看左边

3. 堆 vs 栈

项

栈

堆

管理

编译器

程序员

速度

快

慢

大小

小

大

👉 面试加分:

  • 栈溢出 vs 内存泄漏

4. 内存分区

  • 栈区

  • 堆区

  • 全局/静态区

  • 常量区

  • 代码区

👉 常问:

static变量在哪?→ 静态区

二、类与对象(高频)

5. struct vs class

  • 默认权限:

    • struct:public

    • class:private

👉 本质几乎一样

6. 构造函数 / 析构函数

  • 构造:初始化

  • 析构:释放资源

👉 高频:

析构函数为什么要虚函数?

✔ 防止“父类指针删除子类对象”资源泄漏

7. 拷贝构造函数

A(const A& other);

👉 什么时候调用:

  • 传值

  • 返回对象

  • 初始化

8. 深拷贝 vs 浅拷贝

👉 核心:

  • 浅拷贝:拷贝指针

  • 深拷贝:拷贝数据

👉 面试加分:

  • 避免 double free

9. this 指针

👉 本质:

  • 指向当前对象

三、三/五法则(重点)

10. Rule of Three / Five

如果类涉及资源管理:

必须实现:

  • 构造函数

  • 拷贝构造

  • 析构函数

C++11扩展:

  • 移动构造

  • 移动赋值

四、多态(核心考点)

11. 虚函数

virtual void func();

👉 实现机制:

  • vtable(虚函数表)

12. 多态实现条件

  1. 继承

  2. 虚函数

  3. 基类指针调用

13. 纯虚函数 & 抽象类

virtual void func() = 0;

👉 抽象类不能实例化

14. 虚函数表(高频深入)

👉 本质:

  • 每个类一个 vtable

  • 对象中有 vptr 指针

👉 面试加分:

  • 多继承 → 多个vptr

五、C++11/14/17新特性

15. auto

auto x = 10;

👉 自动推导类型

16. nullptr

👉 替代 NULL(类型安全)

17. 智能指针(重点)

unique_ptr

  • 独占

shared_ptr

  • 引用计数

weak_ptr

  • 解决循环引用

👉 面试经典:

shared_ptr 为什么线程不安全?

18. 右值引用(⭐⭐⭐)

int&& a = 10;

👉 用途:

  • 移动语义

  • 完美转发

19. move

std::move(x);

👉 本质:

  • 强制转为右值

20. 完美转发

std::forward<T>(arg);

六、STL(必考)

21. vector vs list

vector

list

底层

数组

链表

访问

快

慢

插入

慢

快

22. map vs unordered_map

map

unordered_map

实现

红黑树

哈希

有序

✔

✘

23. set / unordered_set

👉 和 map 类似,只存 key

24. 迭代器失效

  • vector扩容 → 全失效

  • erase → 当前失效

七、多线程

25. 线程创建

std::thread t(func);

26. 线程同步

  • mutex

  • lock_guard

  • unique_lock

27. 条件变量

std::condition_variable

👉 用于线程等待/唤醒

28. 死锁

👉 解决:

  • 加锁顺序统一

  • 使用 try_lock

29. 原子操作

std::atomic<int>

👉 无锁线程安全

八、网络/工程向

30. new vs malloc

new

malloc

类型

C++

C

调用构造

✔

✘

31. delete vs free

👉 delete 会调用析构函数

32. 内存泄漏

👉 常见原因:

  • new 不 delete

  • 智能指针循环引用

33. RAII(非常重要)

👉 核心思想:

用对象生命周期管理资源
  • lock_guard

  • 智能指针

34. 虚析构 + 多态删除

Base* p = new Derived;
delete p;  // 必须虚析构

35. 编译过程

  1. 预处理

  2. 编译

  3. 汇编

  4. 链接

36. 静态链接 vs 动态链接

  • 动态库(.so)

  • 运行时加载

37. 内联函数

inline

👉 减少函数调用开销

38. 宏 vs inline

👉 宏不安全,无类型检查

⭐ 必背

  • 虚函数 / 多态

  • 智能指针

  • 右值引用 / move

  • STL(vector/map)

  • 多线程(mutex/死锁)

  • new vs malloc

  • 深拷贝/浅拷贝

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐