/*
@author:wcx
@task:shared_ptr实现
*/
#include<bits/stdc++.h>
using namespace std;
namespace P{
template<typename T>
class Shared_ptr{
public:
Shared_ptr(T *da):s(da),p_cnt(new int(1)){
// s=da;
// p_cnt=new int(1);
// cout<<1<<endl;
}
Shared_ptr(const Shared_ptr&da){
p_cnt=da.p_cnt;
s=da.s;
(*p_cnt)++;
}
~Shared_ptr(){
if(--(*p_cnt)==0){
if(s!=NULL) delete(s);
}
}
T* operator ->(){
return s;
}
T& operator *(){
return *s;
}
int get_cnt(){
if(p_cnt==NULL) return 0;
else return (*p_cnt);
}
protected:
T *s;
int *p_cnt;
};
}
int main(){
using namespace P;
Shared_ptr<int> now(new int(10));
Shared_ptr<int> a(now);
cout<<a.get_cnt()<<endl;
delete &now;
cout<<a.get_cnt()<<endl;
// Shared_ptr<int> a(now);
}
Shared_ptr简单实现
最新推荐文章于 2024-07-30 04:00:00 发布