没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
⼀、作者介绍
⼤家好,我是⼩贺,北交⼤师兄,⽬前就职于宇宙中⼼五道⼝,是这本 C++ ⼋股⽂ PDF 的作者,电⼦书的内容整
理于我公众号「herongwei」⾥的图解⽂章和 GitHub 仓库的学习笔记。
还没关注的朋友,可以微信搜索「herongwei」,或者扫码关注我的公众号,后续最新版本的 PDF 会在我的公众
号第⼀时间发布,⽽且会有更多其他系列的图解⽂章,⽐如数据库、算法等等。
简单介绍下这份 C++ ⼋股⽂ PDF
背景:最近秋招找⼯作,很多读者都来问我学习和⾯试的资料,因此整理了下常⻅的 C++ ⾼频⾯试知识点。
分享给你。
这本电⼦书总共有 20W 多字 +100 多张图,⽂字都是⼩贺⼀个字⼀个字敲出来的, 很多图⽚都是⼩贺⼀个点
⼀条线画出来的,⾮常的不容易。
这本书整理的知识主要是⾯向程序员的,因为⼩贺本身也是个程序员,所以涉及到的知识主要是关于程序员
⽇常⼯作或者⾯试的 C++ 知识。
适合有⼀点 C++ 基础,但是⼜不怎么扎实,或者知识点串不起来的同学,说⽩了,这本电⼦书就是为了拯救
⾯试突击的你,适合⾯试突击 C++ 后台岗位知识时拿来看,不敢说 100 % 涵盖了⾯试问题,但是⾄少 90%
是有的。
这⾥允许⼩贺⾃卖⾃夸⼀下:其中加餐篇-图解 STL 源码(第⼗三章-第⼗七章)⼩贺强烈推荐⼤家看⼀看,
虽然只有五篇,但是耗费了⼩贺⼏个⽉的时间输出,真的是 STL 源码剖析的精华中的精华了
! !
举个栗⼦,随便拿出⼀张图,你都能看的出⼩贺的⽤⼼,是真的是图⽂并茂!就是为了初学者能明明⽩⽩的
搞定它!
那这本书要怎么阅读呢?
这本电⼦书不是教科书,肯定没有教科书的知识点全⾯,是⼀本为了准备⾯试的辅助突击复习资料。
如果你还不是到即将⾯试的时间点,建议多花时间系统学习底层知识,同时扩充知识⾯,才是⻓久之计。这
个时间你需要的是加速度,⽽不是速度。
阅读的顺序可以不⽤从头读到尾,你可以根据你想要了解的知识点,去看哪个章节的⽂章就好,可以随意阅
读任何章节的⽂章。
下⾯这张思维导图是整个电⼦书的⽬录结构:
⾯试官你好,⾸先,说⼀下为什么要使⽤智能指针:智能指针其作⽤是管理⼀个指针,避免咋们程序员申请的空间
在函数结束时忘记释放,造成内存泄漏这种情况滴发⽣。
然后使⽤智能指针可以很⼤程度上的避免这个问题,因为智能指针就是⼀个类,当超出了类的作⽤域是,类会⾃动
调⽤析构函数,析构函数会⾃动释放资源。所以智能指针的作⽤原理就是在函数结束时⾃动释放内存空间,不需要
⼿动释放内存空间。
常⽤接⼝
T 是模板参数, 也就是传⼊的类型;
get() ⽤来获取 auto_ptr 封装在内部的指针, 也就是获取原⽣指针;
operator()
重载
, operator->() 重载了->, operator=()重载了=;
realease() 将 auto_ptr 封装在内部的指针置为 nullptr, 但并不会破坏指针所指向的内容, 函数返回的是内部指
针置空之前的值;
直接释放封装的内部指针所指向的内存, 如果指定了 ptr 的值, 则将内部指针初始化为该值 (否则将其设置为
nullptr;
下⾯分别说⼀下哪四种:
1、auto_ptr(C++98 的⽅案,C11 已抛弃)采⽤所有权模式。
T* get();
T& operator*();
T* operator->();
T& operator=(const T& val);
T* release();
void reset (T* ptr = nullptr);
此时不会报错,p2 剥夺了 p1 的所有权,但是当程序运⾏时访问 p1 将会报错。所以 auto_ptr 的缺点是:存在潜
在的内存崩溃问题!
2、unique_ptr(替换 auto_ptr )
unique_ptr 实现独占式拥有或严格拥有概念,保证同⼀时间内只有⼀个智能指针可以指向该对象。它对于避免资
源泄露特别有⽤。
采⽤所有权模式,还是上⾯那个例⼦
编译器认为 p4=p3 ⾮法,避免了 p3 不再指向有效数据的问题。
因此,unique_ptr ⽐ auto_ptr 更安全。
3、shared_ptr(共享型,强引⽤)
shared_ptr 实现共享式拥有概念,多个智能指针可以指向相同对象,该对象和其相关资源会在“最后⼀个引⽤被销
毁”时候释放。从名字 share 就可以看出了资源可以被多个指针共享,它使⽤计数机制来表明资源被⼏个指针共
享。
可以通过成员函数 use_count() 来查看资源的所有者个数,除了可以通过 new 来构造,还可以通过传⼊auto_ptr,
unique_ptr,weak_ptr 来构造。当我们调⽤ release() 时,当前指针会释放资源所有权,计数减⼀。当计数等于 0
时,资源会被释放。
shared_ptr 是为了解决 auto_ptr 在对象所有权上的局限性 (auto_ptr 是独占的),在使⽤引⽤计数的机制上提供了
可以共享所有权的智能指针。
4、weak_ptr(弱引⽤)
weak_ptr 是⼀种不控制对象⽣命周期的智能指针,它指向⼀个 shared_ptr 管理的对象。进⾏该对象的内存管理
的是那个强引⽤的 shared_ptr。
weak_ptr 只是提供了对管理对象的⼀个访问⼿段。weak_ptr 设计的⽬的是为配合 shared_ptr ⽽引⼊的⼀种智
能指针来协助 shared_ptr ⼯作,它只可以从⼀个 shared_ptr 或另⼀个 weak_ptr 对象构造,,它的构造和析构不会
引起引⽤记数的增加或减少。
weak_ptr 是⽤来解决 shared_ptr 相互引⽤时的死锁问题,如果说两个 shared_ptr 相互引⽤,那么这两个指针的
引⽤计数永远不可能下降为0,也就是资源永远不会释放。它是对对象的⼀种弱引⽤,不会增加对象的引⽤计数,
和 shared_ptr 之间可以相互转化,shared_ptr 可以直接赋值给它,它可以通过调⽤ lock 函数来获得
shared_ptr。
当两个智能指针都是 shared_ptr 类型的时候,析构时两个资源引⽤计数会减⼀,但是两者引⽤计数还是为 1,导
致跳出函数时资源没有被释放(的析构函数没有被调⽤),解决办法:把其中⼀个改为weak_ptr就可以。
auto_ptr<std::string> p1 (new string ("hello"));
auto_ptr<std::string> p2;
p2 = p1; //auto_ptr 不会报错.
unique_ptr<string> p3 (new string (auto));//#4
unique_ptr<string> p4;//#5
p4 = p3;//此时会报错
剩余214页未读,继续阅读
资源评论
朝游碧海暮苍梧
- 粉丝: 2873
- 资源: 160
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功