面试周刊(4):类自定义 new/delete 实现?三阶段(编译/链接/运行)一口气讲透

各位老师好!

这是CPP面试冲刺周刊 (c++ weekly)
陪你一起快速冲击大厂面试 第四期

周刊目标

  • 不是成为C++专家,而是成为C++面试专家

本期内容

  • 如何为一个类自定义new/delete

一页PPT 解释: (回答有逻辑)

维度 ① 类内 new/delete ② 全局 new/delete(弱符号) ③ LD_PRELOAD + tcmalloc
生效时机 编译期(静态绑定) 链接期(符号强弱覆盖) 运行期(动态装载器优先级)
作用范围 仅该类/基类查找链 全局(除已绑定到类内的 new) 全局(动态库与主程序)
机制 作用域查找 + 非虚(无 vtable) 弱符号 vs 强符号 预加载库先解析同名符号
是否依赖弱符号 是(libstdc++ 默认全局 new 为 weak) 否(依赖 ld.so 解析顺序)
源码是否需改动 需要(在类内写函数) 需要(提供全局 operator new/delete) 不需要(设置环境变量即可)
常见用途 类级内存池、对齐、对象复用 全局策略(统计/替换分配器/统一注入) 线上快速切换分配器/排查内存/零侵入部署

题目来源C++ Primer 第 18 章节

  • Exercise 18.9: Declare members new and delete for the QueueItem class.
  • 18.1.6 Class Specific new and delete
  • Exercise 18.6: Reimplement your Vector class to use operator new, operator delete, placement new, and direct calls to the destructor.

帖子 字数 限制 请阅读 原文:https://mp.weixin.qq.com/s/wSP672RIfzRZhMTU-YotkQ