String类之引用计数和写时拷贝

举报
竹叶青 发表于 2019/10/15 12:22:32 2019/10/15
【摘要】 string 类写到这里已经是升级版了,大家能看懂多少算多少,在面试的时候尽量不要给面试官说你懂这个,万一把自己搞糊涂了,岂不是得不偿失。好了 ,废话到此结束,正文开始。引用计数我们知道,在浅拷贝当中,由于多个对象共用同一块空间,最后释放内存的时候导致同一块内存多次释放而出现问题,那么问题来了,**能否保证当多个对象共同使用同一块空间时,该空间只释放一次? **答案当然是可以的了。 引用计数...

top1.86439ad.png

string 类写到这里已经是升级版了,大家能看懂多少算多少,在面试的时候尽量不要给面试官说你懂这个,万一把自己搞糊涂了,岂不是得不偿失。

好了 ,废话到此结束,正文开始。

引用计数

我们知道,在浅拷贝当中,由于多个对象共用同一块空间,最后释放内存的时候导致同一块内存多次释放而出现问题,那么问题来了,**能否保证当多个对象共同使用同一块空间时,该空间只释放一次? **答案当然是可以的了。 引用计数原理:当多个对象共享同一块资源时,要保证该资源只释放一次,只需要记录有多少个对象在管理这份资源即可,每增加(减少)一个对象相时,给该记数加一(减一),当最后一个对象不使用时,该对象负责将资源释放掉即可。 具体操作我们看代码:

image.png

image.png

采用引用计数后虽然解决了这个问题,但它仍然是浅拷贝,而且,如果对象很多的话,我们可能会忘记释放某一些空间,为了完美的解决这个小小的缺陷,我们又引进了写时拷贝这个概念。

以前在动态内存开辟中说new[]的时候应该说过new[]在底层其实人家是给它多开辟了4个字节的内存,用来存放引用记数,这样不仅解决了上述问题还可以让我们随意更改单个字符。

image.png

image.png

image.png

本文转载自异步社区

原文链接:

https://www.epubit.com/articleDetails?id=Nf3b4a147-0a18-4242-b388-59f303efc32a


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。