关注
//前置声明 因为在使用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;
}
查看原帖
点赞 评论
相关推荐
05-07 20:52
吉林大学 Java 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 面试问题记录 #
25410次浏览 437人参与
# 面试经验谈 #
16274次浏览 259人参与
# 京东TGT #
31998次浏览 153人参与
# 假如我穿越到了妈妈的18岁 #
563次浏览 25人参与
# 对妈妈没说出口的话 #
9247次浏览 256人参与
# 面试吐槽bot #
3260次浏览 42人参与
# 职场新人生存指南 #
335721次浏览 7200人参与
# 妈妈治愈了你哪些脆皮时刻 #
3732次浏览 91人参与
# 异地恋该为对方跳槽吗 #
25099次浏览 123人参与
# 硬件人更看重稳定还是高薪 #
40198次浏览 207人参与
# 请用你的专业向妈妈表白 #
2415次浏览 39人参与
# 硬件人秋招的第一个offer #
66234次浏览 1082人参与
# 机械求职避坑tips #
41674次浏览 355人参与
# 工作一周年分享 #
14404次浏览 100人参与
# 入职第五天,你被拉进了几个工作群 #
13458次浏览 77人参与
# 机械人,你的第一份感谢信是谁给的 #
22567次浏览 295人参与
# 视觉/交互/设计招聘信息汇总 #
10053次浏览 595人参与
# 租房找室友 #
28844次浏览 148人参与
# 不考虑转正,实习多久合适 #
24845次浏览 119人参与
# 签约有哪些注意事项 #
33764次浏览 241人参与
# 上班苦还是上学苦呢? #
214119次浏览 1288人参与