C++ 面试问题

💡 原文英文,约1500词,阅读约需6分钟。
📝

内容提要

这篇文章是关于C++面试问题的后续,介绍了局部变量、delete和delete[]的区别、赋值运算符的实现、std::map和std::unordered_map的区别、虚函数的实现以及错误的修复方法。这些问题适用于C++编程职位的面试。

🎯

关键要点

  • 这篇文章是关于C++面试问题的后续,适用于C++编程职位的面试。
  • 局部变量在函数返回后会消失,导致引用成为悬空引用。
  • delete用于销毁单个对象,delete[]用于销毁对象数组。
  • 赋值运算符需要实现深拷贝,避免内存泄漏和双重删除的问题。
  • std::map使用平衡二叉树实现,平均和最坏情况下的时间复杂度为O(lg n),而std::unordered_map使用哈希表实现,平均时间复杂度为O(1)。
  • 虚函数通过虚表(vtbl)和虚指针(vptr)实现,确保运行时的多态性。
  • 构造函数中如果抛出异常,可能导致部分构造的对象内存泄漏。
  • 使用std::unique_ptr可以避免内存泄漏问题。
  • placement new用于在特定内存地址创建对象,需确保地址对齐和大小合适。
  • 销毁placement new创建的对象需要显式调用其析构函数。
➡️

继续阅读