滴滴 IOS客户端-C++ 一面
介绍 C++11 的一些新特性
C++11 是现代 C++ 的分水岭,重点是语言层面支持并发、资源管理和泛型能力增强。面试里可以优先说这几类:语法简化、内存与对象语义、并发库、类型推导。
常见可答内容是:auto 和 decltype、范围 for、右值引用与移动语义、nullptr、lambda、std::thread/mutex/condition_variable、smart pointer、unordered_map、constexpr、static_assert。如果只给一句总结,可以说 C++11 让“写对代码”和“写高性能代码”同时更容易。
智能指针的实现原理
本质是 RAII:把“资源释放”绑定到对象生命周期。对象离开作用域时自动析构,析构里释放资源。 unique_ptr 独占所有权,不可拷贝可移动;shared_ptr 通过控制块维护强引用计数,计数归零时释放对象;weak_ptr 只观察不拥有,不增加强引用,用来打破循环引用。
shared_ptr 的关键结构是控制块:通常包含强计数、弱计数、删除器等元数据。拷贝 shared_ptr 会原子地增加强计数,析构会原子减少;当强计数变 0,执行删除器销毁对象;当弱计数也为 0,再释放控制块。
智能指针的优缺点
优点是显著降低手动 new/delete 出错概率,减少泄漏和悬空指针;异常路径也能自动回收资源。缺点主要在 shared_ptr:有额外控制块和原子计数开销,错误使用容易出现循环引用,且所有权语义复杂时可读性下降。
实践里通常建议:默认用 unique_ptr,确实需要共享生命周期再用 shared_ptr,涉及双向关系时引入 weak_ptr。
C++ 中的内存分布
进程虚拟内存通常可分为代码区、全局/静态区、堆、栈,以及常量区(通常映射在只读段)。
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏系统梳理C++方向, 大中厂高频高频面试考点 , 内容皆来自真实面试经历,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力.
