C++11 智能指针

本文介绍了C++11引入的智能指针,包括shared_ptr、unique_ptr和weak_ptr。智能指针通过自动管理堆内存,避免了手动释放可能导致的内存泄漏问题。shared_ptr允许多个指针共享资源,unique_ptr确保一对一的独占所有权,而weak_ptr则用于解决shared_ptr可能导致的循环引用问题。掌握这些智能指针的使用,能有效提升C++程序的健壮性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:此为个人梳理的智能指针的相关知识,如有问题欢迎指正。


一、智能指针定义及作用

智能指针是C++11新特性,智能指针主要用来管理在堆上分配的内存,它将普通的指针封装为一个栈对象,当栈对象生存周期结束后,会在析构函数中释放申请的内存,防止内存泄露。

C++11引入智能指针,方便管理堆内存。普通指针需要手动申请和释放内存,使用智能指针不需要关心对象内存申请和释放,可有效避免堆内存泄漏问题(忘记释放)。

二、智能指针类型

智能指针包括三种: shared_ptr、unique_ptr、weak_ptr

1.shared_ptr

shared_ptr是使用最多的一种。

多个智能指针可以指向同一个对象,即实现了资源的多指针共享。

shared_ptr引入了计数机制,可以通过use_count成员函数查看资源所有者的个数。当一个shared_ptr指向该对象,则计数加一,当一个shared_ptr释放,计数减一。当最后一个指针释放,就释放内存。

2.unique_ptr

unique_ptr,“针如其名”,是为一对一独占式。同一时间只能有一个智能指针可以指向该对象。试图复制unique_ptr会报错。当unique_ptr已经指向一个对象的时候,重新让它指向新的对象,则之前对象会被释放。

3.weak_ptr

弱指针主要是为了避免shared_ptr循环引用问题:当两个对象相互使用一个shared_ptr成员变量指向对方,会造成循环引用,使引用计数失效,从而导致内存泄漏。它是对对象的一种弱引用,不会增加对象的引用计数,和shared_ptr之间可以相互转化,shared_ptr可以直接赋值给它,它可以通过调用lock函数来获得shared_ptr。

当出现循环引用时,把其中一个shared_ptr转化成weak_ptr即可解决问题。


总结

智能指针可以帮助内存管理,可有效避免堆内存泄漏问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值