面试真题

C++ · 困难 · 字节跳动

手撕shared_ptr

困难 C++ 🎤 字节跳动
参考答案
结论:shared_ptr通过引用计数实现共享所有权智能指针。核心要点:1)类内含T* ptr和int* cnt(或atomic<int>*);2)构造时cnt=new int(1);3)拷贝构造复制ptr和cnt并(*cnt)++;4)析构时--(*cnt),若0则delete ptr和cnt;5)赋值运算符先增右值计数再减左值,处理自赋值;6)与unique_ptr区别在可多指针共享,需注意循环引用。示例:template<class T>class sp{T*p;int*c;sp(T*x):p(x),c(new int(1)){}~sp(){if(--*c==0)delete p,delete c;}};
题目整理自公开面经,答案由校招宝自研生成,仅供参考