STL源码阅读 -- basic_string

概述

平时使用stl的basic_string和string的时候都包含的是string这个文件,这个文件在/usr/include/c++/4.4.4/ 目录中,这个文件只是包含了实现basic_string和string时所需要的所有文件,basic_string和string 的代码主要在bits/basic_string.h和bits/basic_string.tcc两个文件中实现。

基本结构

basic_string的基本结构如下图:
basic_string
其中data中保存着实际的字符信息。_M_length, _M_capacity描述了data中实际字符的长度以及data的容量,_M_refcount表示是否有多个指针指向同一个data,这种情况可能在字符赋值,拷贝等情况下发生。

拷贝构造函数

在拷贝构造函数basic_string(const basic_string& __str)中,当__str是可共享的并且两个字符串使用相同的 分配器的时候实际上新的字符串执行的时候__str相同的字符串,否则就根据__str的字符串拷贝一份一模一样的。
当__str可共享的时候,内存中实际的情况:

当__str不可共享的时候,内存中实际的情况:

basic_string其他的操作

basic_string的其他操作都是围绕着这个内存模型进行的,当两个basic_string共享同一_Rep的时候,对其中任何一个进行改动(包括间接改动,例如获得一个非const的迭代器),都会分离两个basic_string,内存的情况从图2变成图3,然后再对指定的basic_string进行操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值