关注
//前置声明 因为在使用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;
}
查看原帖
点赞 评论
相关推荐
![](https://static.nowcoder.com/fe/file/oss/1716965564844UEBJN.png)
![](https://static.nowcoder.com/fe/file/oss/1716965585666UBBME.png)
深信服
| 校招
| 14个岗位
点赞 评论 收藏
分享
02-12 13:38
南京信息工程大学 数据分析师 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 读研or工作,哪个性价比更高? #
24539次浏览 330人参与
# 如果重来一次你还会读研吗 #
154643次浏览 1701人参与
# 科大讯飞求职进展汇总 #
258940次浏览 2595人参与
# 秋招感动瞬间 #
10973次浏览 102人参与
# 阿里巴巴创始人马云回国 #
14261次浏览 87人参与
# 职场新人生存指南 #
195797次浏览 5398人参与
# 你最满意的offer薪资是哪家公司? #
11956次浏览 109人参与
# 长光卫星求职进展汇总 #
27602次浏览 184人参与
# 文科生还参加今年的春招吗 #
3406次浏览 29人参与
# 追觅科技求职进展汇总 #
8535次浏览 58人参与
# 选择和努力,哪个更重要? #
42295次浏览 472人参与
# 招聘要求与实际实习内容不符怎么办 #
41520次浏览 469人参与
# 打工人的工作餐日常 #
24729次浏览 221人参与
# 机械制造岗投递时间线 #
19328次浏览 324人参与
# 小红书求职进展汇总 #
40455次浏览 346人参与
# 影石Insta360求职进展汇总 #
107709次浏览 969人参与
# 如果再来一次,你还会学硬件吗 #
102836次浏览 1236人参与
# 机械人选offer,最看重什么? #
68613次浏览 433人参与
# 机械人怎么评价今年的华为 #
180354次浏览 1485人参与
# 滴!实习打卡 #
554852次浏览 6009人参与