概述
平时使用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的基本结构如下图:
其中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进行操作。