栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++11 智能指针

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++11 智能指针

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

文章目录

一、智能指针定义及作用

二、智能指针类型

1.shared_ptr

2.unique_ptr

3.weak_ptr

总结


一、智能指针定义及作用

智能指针是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即可解决问题。


总结

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768437.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号