#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; }
点赞 评论

相关推荐

01-17 18:15
已编辑
门头沟学院 前端工程师
从上午约我面试然后他迟到,然后中午发消息打电话给我说重约面试时间,我就该意识到。【管理不规范,只是这家公司最小的问题】他妈一个不是技术的人来给我技术面。。。连vvue什么?连react是什么?连普通的HTTP请求是什么?这些东西都不懂的人来给我做技术面,我真的。。。。他妈浪费我40分钟。。一天面了三场,这家公司属实牛逼。不停的问我说上班下班时间谁来派任务公司在哪个区发展怎么样,公司的管理模式什么样,培养机制怎么样带教负责什么。如果出bug了谁来负责。我真的求你了别闹了。我答了15分钟,我已经很不想回答了。然后他就问了我一些很招笑的面试问题。问我前端框架架构设计怎么设计,Websocket可以实现SSE吗??最后还要我硬说,为什么我们公司没转正?为什么?为什么?我说我怎么知道。。这是领导决定,又不是我决定,他说让我分析一下。。。我真的草了,这个人是来搞我的吗?我最后问我说这个没有技术面,他说他就是技术面虽然我今天面的另外两家也很逆天。一个人不停的吹牛,自己100人的公司是全国前几,吹牛了一个小时。我中途几次想跑,真的是底下玩手机在听他那吹牛。。然后最后来了句说,我承诺的东西要实现哦,不然的话,公司会追责的,我我请问我承诺了什么?从头到尾也没有说让我承诺什么。而且我只是作为一个小小的前端卡拉咪,应届生。我要承担什么??好崩溃。。好崩溃的,一天面了三场。两家1000-9999的公司。面试官问的都很傻逼,甚至有些东西我问他估计都答不出来。。&nbsp;我这是在干嘛呀?浪费我一天的时间,我的奶奶。。我本来是抱着说我很菜,我要面试中发现自己的问题,现在来看他妈的这三场面试,面试本身就是问题。。
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务