C++面试题更新 2026-08-05

在 C++ 中,引入 make_shared 的原因是什么?请阐述其主要的优势。

性能优化技术原理C++

考察说明

考察对 make_shared 原理及内存管理优势的理解。

回答思路

  1. 【回答框架 1】make_shared 是 C++11 引入的函数模板,用于在单次内存分配中同时创建控制块和对象,从而避免传统 shared_ptr 构造时的两次分配。
  2. 【回答框架 2】其核心优势在于减少一次内存分配,提高缓存局部性,并降低内存碎片化。
  3. 【回答框架 3】另一个关键优点是异常安全:使用 make_shared 可以避免在构造对象和创建 shared_ptr 之间抛出异常时造成的内存泄漏。
  4. 【回答框架 4】此外,控制块和对象在同一内存块中,减少了指针追踪的开销,提升了性能。
  5. 【关键点 1】make_shared 在单次分配中创建对象和控制块,减少了内存分配次数。
  6. 【关键点 2】异常安全:避免了裸 new 后构造 shared_ptr 过程中可能发生的泄漏。
  7. 【关键点 3】控制块与对象连续存储,改善缓存局部性。
  8. 【易错点 1】make_shared 不支持自定义删除器。
  9. 【易错点 2】由于对象和控制块一起分配,对象生命周期可能延长,直到控制块被释放。