面试真题

C++ · 中等 · 哔哩哔哩

unique_ptr是怎么实现的?unique_ptr 和 shared_ptr 删除器的设计差异?

中等 C++ 🎤 哔哩哔哩
参考答案
结论:unique_ptr通过独占裸指针和删除器实现单一所有权无引用计数;shared_ptr通过控制块含引用计数和删除器实现共享。核心要点:unique_ptr实现为模板类含T*指针和删除器(默认delete),禁止拷贝仅允许移动,析构时调用删除器;删除器设计差异在于unique_ptr删除器是模板参数一部分编译期绑定零开销,shared_ptr删除器存储在堆上控制块中类型擦除运行时调用支持不同删除器赋值兼容;示例:unique_ptr<int, void(*)(int*)> p(free)类型含函数指针,shared_ptr<int> s(new int, free)类型固定;原理:unique_ptr轻量,shared_ptr有原子计数。
题目整理自公开面经,答案由校招宝自研生成,仅供参考