关注
#include <iostream>
using namespace std;
template<class T>
class SmartPtr
{
public:
SmartPtr(T *p){
try
{
use_count = new int(1);
}
catch (...)
{
delete ptr;
ptr = nullptr;
use_count = nullptr;
cout << "Allocate memory for use_count fails." << endl;
exit(1);
}
cout << "Constructor is called!" << endl;
}
~SmartPtr(){
// 只在最后一个对象引用ptr时才释放内存
if (--(*use_count) == 0)
{
delete ptr;
delete use_count;
ptr = nullptr;
use_count = nullptr;
cout << "Destructor is called!" << endl;
}
}
SmartPtr(const SmartPtr<T> &orig){
// 浅拷贝
ptr = orig.ptr;
use_count = orig.use_count;
++(*use_count);
cout << "Copy constructor is called!" << endl;
}
SmartPtr<T>& operator=(const SmartPtr<T> &rhs){
// 浅拷贝
++(*rhs.use_count);
// 将左操作数对象的使用计数减1,若该对象的使用计数减至0,则删除该对象
if (--(*use_count) == 0)
{
delete ptr;
delete use_count;
cout << "Left side object is deleted!" << endl;
}
ptr = rhs.ptr;
use_count = rhs.use_count;
cout << "Assignment operator overloaded is called!" << endl;
return *this;
}
private:
T *ptr;
// 将use_count声明成指针是为了方便对其的递增或递减操作
int *use_count;
};
int main()
{
// Test Constructor and Assignment Operator Overloaded
SmartPtr<int> p1(new int(0));
p1 = p1;
// Test Copy Constructor
SmartPtr<int> p2(p1);
// Test Assignment Operator Overloaded
SmartPtr<int> p3(new int(1));
p3 = p1;
cin.get();
return 0;
}
查看原帖
点赞 评论
相关推荐
11-14 08:52
山东工商学院 C++
吴鹏阳:这个老师如果爱举报,你这门课确实可能挂科,这没办法。但是辅导员所谓的延毕,,怎么说呢,毕业生的就业率可是辅导员的一大考核,他咋可能为了一个逃课实习去损害自己的利益呢? 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你想跟着什么样领导? #
3896次浏览 67人参与
# 你的秋招白月光和意难平公司 #
5401次浏览 63人参与
# 百度秋招 #
55514次浏览 394人参与
# 找实习是选平台还是选业务? #
9095次浏览 139人参与
# 什么样的背景能拿SSP? #
116827次浏览 409人参与
# 从夯到拉,评价编程语言 #
4385次浏览 46人参与
# 秋招签约后的心态变化 #
105613次浏览 923人参与
# 每个月花钱最多的地方是? #
4586次浏览 68人参与
# 分享一个让你热爱工作的瞬间 #
47022次浏览 411人参与
# 职场吐槽大会 #
289194次浏览 2108人参与
# xxx岗位的一天 #
8798次浏览 87人参与
# 十一月总结 #
12056次浏览 140人参与
# 你面试时吹过最大的牛 #
18540次浏览 107人参与
# 实习学到最有价值的工作习惯 #
43155次浏览 378人参与
# AI“智障”时刻 #
5472次浏览 51人参与
# 作业帮求职进展汇总 #
76853次浏览 519人参与
# 实习生如何通过转正 #
111330次浏览 1421人参与
# 饿了么求职进展汇总 #
79938次浏览 684人参与
# 应届生第一份工作最好去大厂吗? #
103606次浏览 945人参与
# 非技术求职现状 #
548817次浏览 3507人参与
# 你秋招想去哪些公司 #
67329次浏览 1724人参与
