String类之引用计数和写时拷贝
【摘要】 string 类写到这里已经是升级版了,大家能看懂多少算多少,在面试的时候尽量不要给面试官说你懂这个,万一把自己搞糊涂了,岂不是得不偿失。好了 ,废话到此结束,正文开始。引用计数我们知道,在浅拷贝当中,由于多个对象共用同一块空间,最后释放内存的时候导致同一块内存多次释放而出现问题,那么问题来了,**能否保证当多个对象共同使用同一块空间时,该空间只释放一次? **答案当然是可以的了。 引用计数...
string 类写到这里已经是升级版了,大家能看懂多少算多少,在面试的时候尽量不要给面试官说你懂这个,万一把自己搞糊涂了,岂不是得不偿失。
好了 ,废话到此结束,正文开始。
引用计数
我们知道,在浅拷贝当中,由于多个对象共用同一块空间,最后释放内存的时候导致同一块内存多次释放而出现问题,那么问题来了,**能否保证当多个对象共同使用同一块空间时,该空间只释放一次? **答案当然是可以的了。 引用计数原理:当多个对象共享同一块资源时,要保证该资源只释放一次,只需要记录有多少个对象在管理这份资源即可,每增加(减少)一个对象相时,给该记数加一(减一),当最后一个对象不使用时,该对象负责将资源释放掉即可。 具体操作我们看代码:
采用引用计数后虽然解决了这个问题,但它仍然是浅拷贝,而且,如果对象很多的话,我们可能会忘记释放某一些空间,为了完美的解决这个小小的缺陷,我们又引进了写时拷贝这个概念。
以前在动态内存开辟中说new[]的时候应该说过new[]在底层其实人家是给它多开辟了4个字节的内存,用来存放引用记数,这样不仅解决了上述问题还可以让我们随意更改单个字符。
本文转载自异步社区
原文链接:
https://www.epubit.com/articleDetails?id=Nf3b4a147-0a18-4242-b388-59f303efc32a |
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)