关注
//前置声明 因为在使用sharedptr时可能会产生循环引用的缺陷,所以使用weakedptr进行辅助
template <class T>
class WeakedPtr;
template<class T>
class MySharedPtr
{
public:
//定义为友元类
friend class WeakedPtr<T>;
MySharedPtr(T* ptr = NULL) :_ptr(ptr), _refCount(new int(1))
{}
~MySharedPtr()
{
if (--(*_refCount) == 0)
{
delete _ptr;
delete _refCount;
}
}
//s1(s2)
MySharedPtr(const MySharedPtr<T>& sp) :_ptr(sp._ptr), _refCount(sp._refCount)
{
(*_refCount)++;
}
//sp1 = sp2
MySharedPtr<T>& operator=(MySharedPtr<T>& sp)
{
if (_ptr != sp._ptr)
{
if (--(*_refCount) == 0)
{
delete _ptr;
delete _refCount;
}
_ptr = sp._ptr;
_refCount = sp._refCount;
(*_refCount)++;
}
return *this;
}
//为了像指针一样才进行*\->的重载
//->的重载
T* operator->()
{
return _ptr;
}
//*的重载
T& operator*()
{
return *_ptr;
}
//查看引用计数的多少
int UseCount()
{
return *_refCount;
}
private:
T* _ptr;
int* _refCount;//一块空间有一个指针
};
template <class T>
class WeakedPtr
{
public:
WeakedPtr() :_ptr(NULL)
{}
WeakedPtr(const MySharedPtr<T>& sp)
:_ptr(sp._ptr)
{}
WeakedPtr<T>& operator=(const MySharedPtr<T>&sp)
{
_ptr = sp._ptr;
return *this;
}
T& operator* ()
{
return *_ptr;
}
T* operator->()
{
return _ptr;
}
private:
T* _ptr;
};
struct ListNode
{
int _data;
WeakedPtr<ListNode> _next;
WeakedPtr<ListNode> _prev;
~ListNode()
{
cout << "~ListNode" << endl;
}
};
void testMySharedPtr()
{
//SharePtr<int> sp1(new int(1));
//SharePtr<int> sp2(sp1);
MySharedPtr<ListNode> cur(new ListNode);
MySharedPtr<ListNode> next(new ListNode);
cout << cur.UseCount() << endl;
cout << next.UseCount() << endl;
cur->_next = next;
next->_prev = cur;
cout << cur.UseCount() << endl;
cout << next.UseCount() << endl;
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 帮我看看,领导说这话什么意思? #
16164次浏览 88人参与
# 牛友的志愿填报指南 #
33672次浏览 181人参与
# 快手技术岗信息交流阵地 #
146次浏览 0人参与
# 你的mentor是什么样的人? #
12683次浏览 97人参与
# 毕业租房也有小确幸 #
140311次浏览 4491人参与
# 怎么给家人解释你的工作? #
7978次浏览 57人参与
# 得物app工作体验 #
27225次浏览 61人参与
# 租房前辈的忠告 #
259257次浏览 7114人参与
# 国企还是互联网,你怎么选? #
167763次浏览 1194人参与
# 求职中的尴尬瞬间 #
1763次浏览 25人参与
# 小红书求职进展汇总 #
121055次浏览 953人参与
# 薪资爆料 #
200623次浏览 1513人参与
# 校招泡的最久的公司是哪家? #
10410次浏览 66人参与
# 求职低谷期你是怎么度过的 #
10371次浏览 201人参与
# 26届秋招公司红黑榜 #
24532次浏览 90人参与
# 从哪些方向判断这个offer值不值得去? #
13191次浏览 162人参与
# 度小满求职进展汇总 #
11928次浏览 64人参与
# 你觉得mentor喜欢什么样的实习生 #
14906次浏览 394人参与
# 牛客树洞,我想对你说 #
4452次浏览 64人参与
# 还记得你第一次面试吗? #
340184次浏览 3878人参与
# 机械人的秋招小目标 #
22609次浏览 217人参与