智能指针的初步认识

开辟了内存空间,必定要释放内存空间,如果不释放就会造成内存泄漏,引发安全问题。
如果代码量很少的时候,我们会记得释放掉开辟的空间,但是如果代码量过大,我们会忘记开辟的空间,那么就需要智能指针来帮助我们自动释放空间。
例如:

#include<memory>
int main()
{
	int* tmp = new int[10];
	auto_ptr<int> ap(tmp);
	cout << *ap <<endl;
	//delete []tmp;
	return 0;
}

有了智能指针,下面的释放空间的语句我们就不需要了。
但是有个疑问,智能指针不应该是指针吗?
在这里插入图片描述
在这里插入图片描述

走到定义之后,我们会发现auto_ptr不是一个指针,而是一个类,ap就是一个对象,它会像指针一样使用。

那么,智能指针到底是怎样实现的,那我们就只有进入底层去深入剖析了。
首先是它的构造函数,
在这里插入图片描述

其次是拷贝构造函数,拥有权的释放
在这里插入图片描述
把指针_Myptr保留,然后将自己赋值成空
在这里插入图片描述

然后是运算符的重载
在这里插入图片描述
返回_Myptr指针指向的值
在这里插入图片描述
接下来是赋值语句,将自己的对象的拥有权释放掉,再重新设置给当前要赋值的对象
在这里插入图片描述
如果是指向不同空间的指针,释放当前指针_Myptr,把新的空间的指针_Ptr给_Myptr,让_Myptr管理新的空间
在这里插入图片描述

最后是析构函数
在这里插入图片描述
将空指针_Myptr释放

智能指针有很多的分类
C++98
auto_ptr

C++11
unique_ptr

Boost库
scoped_ptr(不允许拥有权的转移)
scoped_array

shared_ptr
shared_array

weak_ptr

instrusive_ptr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值