C++智能指针
一、智能指针的作用
上一篇介绍了内存池的原理和实现,详情请见内存池设计与实现;
内存池可以帮助我们有效的对内存进行管理,智能指针可以很方便的管理指针,避免出现内存泄漏;
智能指针的作用
智能指针的作用:智能指针可以帮助我们避免在申请空间后忘记释放造成内存泄漏的问题;因为智能指针本身是一个类(后面也会自己实现一下),当出了类的作用域的时候,类会调用析构函数进行释放资源。所以智能指针的作用原理就是在函数结束时自动释放内存空间,不需要手动释放内存空间。
二、智能指针的原理
我们这里的指针指针主要指的是shared_ptr
,这也是一种引用计数型智能指针,引用计数顾名思义就是在内存中记录有多少个智能指针被引用,新增一个引用计数加一,过期引用计数则减一,当引用计数为0的时候,
智能指针才会释放资源;
案例一
#include
#include
using namespace std;
class A
{
public:
A()
{
cout <"A Constructor" <endl;
}
~A()
{
cout <"A Destruct" <endl;
}
};
int main(){
shared_ptr p = make_shared();cout <"count:"<endl;return 0;
}
结果:
root@iZuf67on1pthsuih96udyfZ:~/C++/Net_C++/demo4# ./test1
A Constructor
count:1
A Destruct
我们再增加一个传参,看一下引用计数:
案例二
#include
#include
using namespace std;
class A
{
public:
A()
{
cout <"A Constructor" <endl;