关注
#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;
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
123123d:简历还没有你的照片清晰,你到底是来秀照片,还是改简历的
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 秋招报数:你投了多少家公司? #
148049次浏览 944人参与
# 你觉得早上几点上班合适? #
94106次浏览 351人参与
# 如何提高实习转正率? #
80465次浏览 487人参与
# 滴滴求职进展汇总 #
297998次浏览 2435人参与
# 一人一个landing小技巧 #
143550次浏览 1500人参与
# 我和mentor的爱恨情仇 #
102046次浏览 923人参与
# 你觉得什么岗位会被AI替代 #
35127次浏览 233人参与
# 实习期间如何提升留用概率? #
230545次浏览 1785人参与
# 美的求职进展汇总 #
343931次浏览 2064人参与
# 聊聊你的被动加班经历 #
6176次浏览 86人参与
# 用一句话形容你的团队氛围 #
36217次浏览 281人参与
# 牛客十周岁生日快乐 #
207187次浏览 1933人参与
# 秋招的破防瞬间 #
500399次浏览 2595人参与
# 互联网公司评价 #
480123次浏览 4093人参与
# 你觉得mentor喜欢什么样的实习生 #
44726次浏览 986人参与
# 听劝,这个公司值得去吗 #
648808次浏览 1993人参与
# 如果工作一直消耗情绪还要继续做吗 #
18220次浏览 83人参与
# 找工作以来,你最看不惯__ #
18783次浏览 356人参与
# 机械人选offer,最看重什么? #
156079次浏览 795人参与
# 实习教会我的事 #
52462次浏览 414人参与