关注
//前置声明 因为在使用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;
}
查看原帖
点赞 评论
相关推荐
04-09 14:12
浙江工业大学之江学院 Java 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# AI时代还有必要刷leetcode吗? #
21043次浏览 316人参与
# 生化环材还是天坑吗 #
63366次浏览 336人参与
# 厦门银行科技岗值不值得投 #
28351次浏览 756人参与
# 有哪些公司在面试时考察AICoding? #
14723次浏览 289人参与
# 薪资爆料 #
411669次浏览 2205人参与
# 从投递到OC,你用了多久 #
19173次浏览 199人参与
# 想从事Agent应该学习哪些技术? #
6105次浏览 214人参与
# 26届春招投递记录 #
2828次浏览 33人参与
# 多益网络工作体验 #
68142次浏览 309人参与
# 秋招报数:你投了多少家公司? #
164248次浏览 971人参与
# HR面都在聊什么? #
10894次浏览 118人参与
# 你都在哪些场所面过试? #
80069次浏览 501人参与
# 你想吐槽公司的哪些规定 #
45649次浏览 212人参与
# 什么人最适合大厂? #
10778次浏览 109人参与
# 哪些公司面试还在问八股? #
11451次浏览 105人参与
# 父母问你工作找得怎么样,怎么回 #
19452次浏览 228人参与
# 如何快速融入团队? #
49268次浏览 305人参与
# 我的求职进度条 #
1073061次浏览 7561人参与
# 毕业论文进行时 #
35311次浏览 166人参与
# 技术转行的心路历程 #
93664次浏览 786人参与
# 你觉得mentor喜欢什么样的实习生 #
58051次浏览 1034人参与
查看12道真题和解析