SmartPtr(智能指针)

智能指针用于防止C++中的内存泄漏,通过RAII机制自动管理内存资源。文章介绍了智能指针的发展历程,包括auto_ptr、scoped_ptr、shared_ptr和weak_ptr。其中,auto_ptr在拷贝时会导致管理权转移,scoped_ptr禁止拷贝以避免问题,shared_ptr通过引用计数管理多指针共享资源,但可能导致循环引用,而weak_ptr则用于解决这个问题。
摘要由CSDN通过智能技术生成

为什么会有智能指针?

在我们现实生活中有这样一个使用场景,每次我们new或者malloc了一块空间,完了必须需要我们手动delete或者free释放这块空间,否则会出现内存泄漏。但是,实际应用中程序未必都会按照顺序执行到释放空间那一步,有时候会在中间部分抛出异常使执行流发生跳转或者发生其他状况,总之代码未按照我们期望的那样去执行,就有可能导致内存泄漏。这时候我们就引入智能指针(自动化管理指针所指向的内存资源的释放),主要是利用RAII机制,RAII它是在面向对象语言中的一种惯用法。资源分配以及初始化,定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放。


智能指针的发展史:

第一个阶段(C++98):

auto_ptr:自动指针,它的主要思想是管理权转移,但其存在很大的缺陷,当要进行拷贝构造或者赋值相关操作时,原来的智能指针就失去意义,此时只有新的智能指针可以使用。简单点说,就是任何时候只能有一个智能指针指向那块空间,这样在使用上造成了很大的不便。

第二个阶段(C++03):

即第三方库Boost库中的智能指针:

scoped_ptr:守卫指针,它的主要思想就是防拷贝。

shared_ptr:共享指针,顾名思义就是共享同一块空间,它的主要思想是引入引用计数,但存在循环引用的缺陷。

weak_ptr:弱指针,它主要用来配合共享指针解决共享指针的循环引用的缺陷。

第三阶段(C++11):

unique_ptr:如同boost库中的scoped_ptr,主要思想就是防拷贝。

shared_ptr:它的主要思想是引入引用计数,但存在循环引用的缺陷。

weak_ptr:弱指针,它主要用来配合共享指针解决共享指针的循环引用的缺陷。

auto_ptr/scoped_ptr/shared_pr/weak_ptr的设计思想、缺陷?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值