写一个智能指针类
–记一次血泪面试😭
#include<iostream>
#include<map>
using namespace std;
template<class T>
class smart_ptr{
string name;
static map<string , int> p;
public:
T* ptr;
smart_ptr(T* ptr){
this->ptr=ptr;
long address = (long)(ptr);
this->name = to_string(address);
if(p.find(name)!=p.end()){
this->ptr=ptr;
p[name]++;
}else{
p[name]=1;
this->ptr=ptr;
}
}
smart_ptr(const smart_ptr & sptr){
this->ptr = sptr.ptr;
this->name = sptr.name;
p[name]++;
}
smart_ptr & operator=(const smart_ptr & sptr){
this->ptr = sptr.ptr;
this->name = sptr.name;
p[name]++;
return *this;
}
T operator*(){
return *(this->ptr);
}
~smart_ptr(){
if(p[name] == 0){
delete ptr;
p.erase(name);
}else{
p[name]--;
}
}
};
template<class T>
map<string,int> smart_ptr<T>::p=map<string,int>();
int main(int argc, char const *argv[])
{
int* a = new int(3);
smart_ptr<int> sp(a);
cout<<*(sp.ptr)<<endl;
cout<<*sp<<endl;
smart_ptr<int> sp1(new int(4));
cout<<*(sp1.ptr)<<endl;
smart_ptr<int> sp2 = sp;
cout<<*sp2<<endl;
smart_ptr<int> sp3(sp2);
cout<<*sp3<<endl;
return 0;
}