c++智能指针

智能指针是C++用于管理动态内存的工具,防止内存泄漏。主要分为unique_ptr、shared_ptr和weak_ptr。unique_ptr独占所有权,不支持复制;shared_ptr支持共享所有权,通过引用计数管理资源,可使用use_count()查看计数;weak_ptr不参与引用计数,用于解决shared_ptr可能导致的死锁问题。
摘要由CSDN通过智能技术生成

背景

一般情况下内存空间分为下面几个部分:

  • 堆:这一部分一般是暴露给程序员,程序员可以通过new来申请底层的空间的。堆的空间一般是通过new来申请的。堆上面的空间会比较大,但是在申请的过程中可能会出现碎片的问题。
  • 栈:这一部分是留给程序的,一般情况下局部变量会放在这一部分空间。堆的空间一般是通过堆帧来进行管理的,这一部分的空间比较小。
  • 数据区:放被初始化的局部变量、全局变量等。

这里就会发生一个问题,就是程序员在写程序的过程中选择使用new进行堆空间的申请,返回了一个指针,但是这个指针在程序返回的时候,没有调用delete掉,这部分的指针就没办法被释放掉,这就导致了内存泄漏。因此在这种情况下,为了比较好的管理内存,智能指针被提出来了。智能指针主要是为了管理在堆上分配的内存。将普通的指针封装成一个栈对象。当对象的生命周期结束之后,会在析构函数中释放掉申请的内存,防止内存泄漏。

智能指针的思想就是利用c++的封装思想,也就是我把new申请空间的指针作为类的对象封装起来,形成一个类。类对象的管理是在栈上面进行的,那么当程序退出的时候,栈上的对象会被自动析构,这样就不会造成内存泄漏。

分类

unique_ptr

这个指针最大的特点就是同一时间只能有一个对象享有所有权。只允许基础指针的一个所有者。可以移到新所有者,但不会复制或共享。 使用的过程如下所示:

class 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值