auto_ptr智能指针

我们通常在一个函数中申请内存和释放内存时是new,delete

比如

void Test()
{
	K* p1(new K);
	delete p1;
}
如果我们假如在delete前过早的return了或者函数结束后都没释放p1;这就引发内存泄漏。

而智能指针,就体现在了它的智能上了,它不用我们去delete,它会等待出了这个作用域会自动调用析构函数自动delete调,它里面有三个成员函数,get(),release(),以及reset()。比较常用。(所在文件<memory>)

p1.release(),就是将该指针置为NULL,但会返回没被NULL前时的指针;

p1.reset(new T(1)),重置,析构delete掉p1所指向的之前对象,new一个新的对象T(1),然后重新分配给p1。

p1.get()返回所指向的指针。

例子在下方,可以复制下来运行观察

template<typename T>
void g()  
{  
// 现在,我们有了一个分配好的对象  
T* pt1 = new T;  
      // 将所有权传给了一个auto_ptr对象  
auto_ptr<T> pt2(pt1);  
      // 使用auto_ptr就像我们以前使用简单指针一样,  
*pt2 = 12;          // 就像*pt1 = 12  
      // 用get()来获得指针的值  
assert( pt1 == pt2.get() );  
      // 用release()来撤销所有权  
T* pt3 = pt2.release();  
      // 自己删除这个对象,因为现在没有任何auto_ptr拥有这个对象  现在pt3=pt1,pt2=NULL
delete pt3;  
} //pt2已经被释放掉

void h()  
{  
auto_ptr<T> pt( new T(1) );  
pt.reset( new T(2) );         // 删除由"new T(1)"分配出来的第一个T(2)       T(1)已经被delete掉了 
} // 最后pt出了作用域,第二个T也被删除了 

有时间我们为防止内存泄漏我们可以使用异常捕获。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值