面试真题

C++ · 中等 · 私募机构

手撕weak_ptr

中等 C++ 🎤 私募机构
参考答案
结论:weak_ptr是配合shared_ptr的弱引用智能指针,不增加强引用计数,用于解决循环引用。核心原理:内部持有指向控制块(含强、弱计数)的指针;构造从shared_ptr来,只增弱计数;析构减弱计数;lock()检查强计数>0则构造shared_ptr返回,否则空。示例:template<typename T> class weak_ptr { ctrl* c; T* ptr; public: weak_ptr(shared_ptr<T>& sp):c(sp.c),ptr(sp.ptr){if(c)++c->weak;} shared_ptr<T> lock(){ if(c&&c->strong>0) return shared_ptr<T>(ptr,c); return nullptr; } }; 注意线程安全需原子操作。
题目整理自公开面经,答案由校招宝自研生成,仅供参考