关注
#include <iostream>
using namespace std;
template<typename T>
class SharedPtr
{
public:
//禁止分配内存时抛出异常
explicit SharedPtr(T *p):ptr(p), use(new (nothrow) size_t(1))
{
//分配内存失败
if (use == nullptr)
{
delete ptr;
ptr = nullptr;
cout << "分配内存失败";
exit(-1);
}
}
explicit SharedPtr(const SharedPtr &rhs) :ptr(rhs.ptr), use(rhs.use)
{
++*use;
}
SharedPtr& operator=(const SharedPtr &rhs)
{
++*rhs.use;
if (--*use == 0)
{
delete ptr;
ptr = nullptr;
delete use;
use = nullptr;
}
ptr = rhs.ptr;
use = rhs.use;
return *this;
}
T* get() const
{
return ptr;
}
size_t use_count() const
{
return *use;
}
bool unique() const
{
return use_count() == 1;
}
//交换两个指针的指向
void swap(SharedPtr &q)
{
SharedPtr temp(q);
q = *this;
*this = temp;
}
T& operator*() const
{
return *ptr;
}
T* operator->() const
{
return & operator*();
}
//虚析构函数
virtual ~SharedPtr()
{
if (--*use == 0)
{
delete ptr;
ptr = nullptr;
delete use;
use = nullptr;
}
}
private:
T *ptr;
size_t *use;
};
int main()
{
//测试
SharedPtr<int> s1(new int(666));
{
SharedPtr<int> s2(s1);
SharedPtr<int> s3(s2);
cout << "*s1 = " << *s1 << endl;
cout << "s1 use_count " << s1.use_count() << endl;
cout << "s1 is unique? " << s1.unique() << endl;
}
SharedPtr<int> s4(new int(888));
SharedPtr<int> s5(s4);
cout << "Before swap:\n";
cout << "*s5 " << *s5 << endl;
cout << "*s1 " << *s1 << endl;
s5.swap(s1);
cout << "After swap:\n";
cout << "*s5 " << *s5 << endl;
cout << "*s1 " << *s1 << endl;
cout << *(s1.get()) << endl;
s1 = s4;
SharedPtr<double> pd1(new double(2.3333));
SharedPtr<double> pd2(new double(0.33333));
cout << "pd1 is unique? " << pd1.unique() << endl;
auto q = &pd1;
cout << "Before swap:\n";
cout << "*pd1 " << *pd1 << endl;
cout << "*pd2 " << *pd2 << endl;
q->swap(pd2);
cout << "After swap:\n";
cout << "*pd1 " << *pd1 << endl;
cout << "*pd2 " << *pd2 << endl;
cout << "test end!\n";
return 0;
}
查看原帖
点赞 评论
相关推荐
很奥的前端仔:如果你接了offer 临时又说不去 hr确实要多做一些工作。 当然如果是接offer之前当我没说
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 牛客2025仙途报告 #
10645次浏览 220人参与
# 我们是不是被“优绩主义”绑架了? #
1181次浏览 53人参与
# 2025年终总结 #
190031次浏览 3199人参与
# 找工作,行业重要还是岗位重要? #
86848次浏览 1736人参与
# 你面试体验感最差/最好的公司 #
27254次浏览 455人参与
# 今年你最想重开的一场面试是? #
10238次浏览 119人参与
# 礼物开箱Plog #
2813次浏览 99人参与
# 为了秋招你都做了哪些准备? #
29458次浏览 524人参与
# 一人说一个提前实习的好处 #
19508次浏览 287人参与
# 秋招落幕,你是He or Be #
20774次浏览 362人参与
# 机械人晒出你的简历 #
147823次浏览 883人参与
# 重来一次,你会对开始求职的自己说 #
9306次浏览 234人参与
# 工作中听到最受打击的一句话 #
11508次浏览 169人参与
# 实习没事做是福还是祸? #
22173次浏览 328人参与
# 工作两年,想和老板谈涨薪怎么说 #
39055次浏览 176人参与
# 离家近房租贵VS离家远但房租低,怎么选 #
13902次浏览 130人参与
# 25届暑期实习 #
1039123次浏览 20591人参与
# 实习的内耗时刻 #
212559次浏览 1579人参与
# 拿到offer之后,可以做些什么 #
81339次浏览 430人参与
# 这些公司卡简历很严格 #
82613次浏览 375人参与
SHEIN希音公司福利 280人发布