share_ptr的实现
使用引用计数器来标记内存被多少个指针指向
定义一个类作为这个指针的指向个数(引用计数)
有一个智能指针指向即 引用计数+1
class Ref_Manggement
{
public:
Ref_Manggement(){}
//为对应指针添加引用计数
void addref(void* mptr)
{
if(mptr != NULL)
{
//根据mptr去遍历整个容器
std::vector<Node>::iterator fin = find(mptr);
//若迭代器遍历到末尾都没找到则说明是一个新指针,创建新指针添加到容器中
if(fin == vec.end())
{
Node node(mptr, 1);
vec.push_back(node);
}
else
{
//若找到,则将对应的引用计数+1
(*fin).ref++;
}
}
}
void delref(void* mptr)
{
if(mptr != NULL)
{
//根据mptr去遍历整个容器
std::vector<Node>::iterator fin = find(mptr);
//遍历整个容器,没找到该指针,则删除的不存在的指针,抛出异常
if(fin == vec.end())
{
throw std::exception("addr is not exsit!")
}
else
{
if((*fin).ref != 0)
{
(*fin).ref--;
}
}
}
}
int getref(void* mptr)
{
if(mptr != NULL)
{
//根据mptr去遍历整个容器
std::vector<No