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

C++11新特性之智能指针

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

C++11新特性之智能指针

智能指针的特性

智能指针可以自动释放不再使用的内存,能够有效的防止内存泄漏。智能指针是一个对象,普通指针是一个变量。智能指针是对普通指针的封装,其安全性要高于直接使用普通指针。 智能指针的分类

共享的智能指针shared_ptr
shared_ptr多个指针指向相同的对象。
每一个shared_ptr的拷贝都指向相同的内存。
shared_ptr使用引用计数,不再被引用时,自动删除所指向的堆内存。独占的智能指针unique_ptr
同一时刻只能有一个unique_ptr指向给定对象。
离开作用域时,若其指向对象,则将其所指对象销毁。弱引用的智能指针weak_ptr
weak_ptr可以从一个shared_ptr或者另一个weak_ptr对象构造,获得资源的观测权,但不能操作shared_ptr指向的内容。
使用weak_ptr的成员函数use_count()可以观测资源的引用计数。
weak_ptr可以使用成员函数lock()从被观测的shared_ptr获得一个可用的shared_ptr对象, 从而操作资源。 智能指针的应用场景

在不考虑程序运行效率的情况下,所有普通指针均可使用智能指针替代。 智能指针的相关问题

Q:shared_ptr的原理
A:shared_ptr维护了一个指向control block的指针对象,来记录引用个数。

Q:如何判断weak_ptr的对象是否失效?
A:
1、expired():检查被引用的对象是否已删除。
2、lock()会返回shared指针,判断该指针是否为空。
3、use_count()也可以得到shared引用的个数,但速度较慢。

Q:shared 和 unique区别
A:unique具有唯一性,对指向的对象值存在唯一的unique_ptr。unique_ptr不可赋值,但是move()可以转换对象的所有权。

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

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

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