关注
#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;
}
查看原帖
点赞 评论
相关推荐
03-01 21:45
中北大学 Python
孤蓝长空:请你说一下为什么你用websocket而不是http,请你说一下什么是rpc,为什么用rpc,你的rpc的传输协议是JSON,xml还是什么 请你描述一下你的鉴权流程(完整的) 我问的是第二个项目,随便问的哈哈哈 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你感受到金三银四了嘛? #
39102次浏览 387人参与
# 秋招感动瞬间 #
117491次浏览 538人参与
# 今天你投了哪些公司? #
70996次浏览 1408人参与
# 你都用AI做什么 #
33255次浏览 302人参与
# 春招 / 实习投递,你最焦虑的一件事 #
34897次浏览 745人参与
# 虽然0面试,但今天___,夸夸自己 #
3927次浏览 103人参与
# 如果给AI员工评绩效,我的答案是…… #
5093次浏览 122人参与
# 哪一刻你对工作祛魅了? #
12015次浏览 121人参与
# 找工作,你都让AI帮你做什么? #
3342次浏览 128人参与
# 为了秋招你都做了哪些准备? #
34238次浏览 544人参与
# 实习学不到东西正常吗? #
4790次浏览 75人参与
# 今年找实习到底有多难? #
10737次浏览 109人参与
# 刚工作的你,踩过哪些坑? #
3024次浏览 63人参与
# 苦尽甘来时,再讲来时路 #
74119次浏览 958人参与
# AI时代下,你的岗位要求有什么变化? #
5466次浏览 109人参与
# 快手工作体验 #
312276次浏览 2914人参与
# 2023毕业生求职有问必答 #
238548次浏览 1676人参与
# 27届求职交流 #
46303次浏览 920人参与
# HR问:你期望的薪资是多少?如何回答 #
83252次浏览 715人参与
# AI项目实战 #
3361次浏览 159人参与