千家信息网

如何进行C++智能指针的实现

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇文章为大家展示了如何进行C++智能指针的实现,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。自己根据http://blog.csdn.net/lf_2016
千家信息网最后更新 2026年11月01日如何进行C++智能指针的实现

本篇文章为大家展示了如何进行C++智能指针的实现,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

自己根据http://blog.csdn.net/lf_2016/article/details/52430895这人的博客做了修改,并对代码做详细的注解
,具体如下:


#include

//删除器类定义,当然也可以定义其他删除器
struct DefaultDel{
//重载()函数运算符,像调用函数一样调用该类的实例
void operator()(void *ptr){
if(ptr==nullptr){
std::cout<<"fuck ,you shou give a valid ptr!"<


}else{
delete ptr;
}
std::cout<<"ptr have been delted!"<
}

};
//D这里表示删除器,D是一个类,重载了函数调用操作符,即可以像函数一样使用这个类
template class SharedPtr {
public:
//这里设置了默认删除器为del函数
SharedPtr(T* ptr,D del = DefaultDel());


//为什么需要复制构造函数和赋值构造函数是因为一个对象可以被多个智能指针指向,而指向只能通过赋值和拷贝做到
//拷贝构造函数
SharedPtr(const SharedPtr &sp);
//赋值运算符重载
SharedPtr& operator=(const SharedPtr &sp);
//析构函数
~SharedPtr();

//为什么要重载*和->,是因为智能指针要实现与普通指针一样的操作
T& operator*();
T* operator->();
T* _ptr;

private:
void release(){
if(--(*_pCount)==0){
_del(_ptr);
delete _pCount;
_ptr=nullptr;
_pCount=nullptr;



}


}

int* _pCount;
D _del;
//static int _pCount;

};

//构造函数初始化
//ShardPtr sp(new int(12),DefaultDel());
template
SharedPtr::SharedPtr(T* ptr,D del)
:_ptr(ptr),_pCount(new int(1)),_del(del){}


//析构函数,调用release释放资源
template
SharedPtr::~SharedPtr(){

release();

}



template
SharedPtr::SharedPtr(const SharedPtr &ps){
_ptr = ps._ptr;

_pCount=ps._pCount;
(*_pCount)++;
//这里为什么不用下面这种方式是智能指针的计数器是共享的,当然把_pCount设置为int静态类型更好
//_pCount=ps->_pCount+1;
//这里为什么不用下面这种方式是因为构造函数已经指定了删除器,当然,复制一个也是可以,但是没必要
//_del=ps._del;
}
template
SharedPtr& SharedPtr::operator=(const SharedPtr &ps){
if(this != &ps){
_pCount=ps._pCount;
(*_pCount)++;
_ptr = ps._ptr;

}
return *this;

}
template
T& SharedPtr::operator*(){

return *_ptr;


}
template
T* SharedPtr::operator->(){

return _ptr;

}



void test(){

SharedPtr sp(new int(1));
//这里传了一个简单的删除器,DefaultDel实例
SharedPtr sp1((int *)malloc(sizeof(int)),DefaultDel());

SharedPtr sa(new int(2));
sa=sp;
//这个应该输出为1
std::cout<<(*sa)<

}
int main()
{
test();

std::cout << "Hello world!" << std::endl;
system("pause");
return 0;
}


具体效果如下:

上述内容就是如何进行C++智能指针的实现,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

函数 指针 智能 C++ 不用 内容 实例 技能 拷贝 指向 方式 知识 运算符 运算 普通 简明 必要 简明扼要 代码 博客 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网新科技 上海睿民互联网科技有限公司 广州百单互联网科技有限公司 金诺互联网科技 重庆互联网络科技 贷财互联网科技 上海亿帐通互联网科技 成都仁贤领冠互联网科技有限公司 哈尔滨秒房互联网科技有限公司 新华互联网科技2019 浙南科技城互联网大厦建设工程 济南有互联网科技公司吗 深圳互联网科技的发展 四川互联网展示科技馆设计 广州梦谷互联网科技有限公司领导 上海万顺科技互联网有限公司招聘 互联网时代高科技布局 互联网的科技体现在哪里 互联网高科技绘画 武汉亿视互联网科技有限公司 互联网和科技技术 平安科技 互联网 佩信高科技互联网 伊宁互联网科技做什么的 众安科技工业互联网合作 富国互联网科技002692 广东鹅鹅鹅互联网科技有限公司 江苏互联网智能科技产品出厂价 北京军民互联网科技公司 高科技和互联网的现代国家
0