码迷,mamicode.com
首页 > 其他好文 > 详细

STL库中string类的探究

时间:2016-04-05 12:11:20      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

在STL中有着一个类就是string类,他的内存布局和存储机制究竟是怎么样的呢?
技术分享
技术分享
这就是建立好的string
可以看出,图中用黄色框框标注的部分就是主要区域
我们用来给string对象进行初始化的字符串被存储在了_Buf当中,_Mysize和_Myres就不用说了,就是上面的size 和 capacity 的值。
 技术分享
技术分享
当只有一个字符作为字符串的时候,就可以很明显的看出来了,_Mysize是指字符串的length
_Myres还是没有改变,_Myres最大就是15么?
技术分享
技术分享
此时还没有变化,再加入一个字符
技术分享
技术分享
可以变成31个,为什么一直都是2的次方-1呢,这是字符串,默认给字符串留下一个结束符‘\0‘的空间
 技术分享
技术分享
 
并且当你给的初始化字符串超过15个的时候,我们存储字符串的位置就改变了,不是在_Buf中而是转到了Ptr这个指针当中去了接下来就来看看,是怎么进行拷贝构造的吧
技术分享
 技术分享
技术分享
 技术分享
可以看出,当时用指针的时候并不是进行浅拷贝,而是进行的深拷贝;
那么_Buf也一样么?是的也是进行的深拷贝
那么也就是说在C++中string类使用的是深拷贝,并且有一个默认的存储缓冲区,大小是16个字节,当存储的字符串长度超出的时候,会使用指针来对字符串进行存储,并且进行拷贝构造的时候两部分都会进行深拷贝。

STL库中string类的探究

标签:

原文地址:http://www.cnblogs.com/lenomirei/p/5354362.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!