- string类中维护了三个指针:
using _Base::_M_start;
using _Base::_M_finish;
using _Base::_M_end_of_storage;
-
_M_start为保存字符串的起始地址
-
_M_finish为终止地址;
-
_M_end_of_storage为string对象中当前申请空间的大小;
-
对string类型再次赋值时:
- 如果新值的长度小于当前字符串的长度,使用memcpy直接拷贝;地址空间不变;
- 如果新值的长度大于当前当前字符串的长度,会申请一个新的空间,将新值拷贝过去,并释放原有空间;
- string的c_str()方法返回的就是_M_start的值,将这个值打出来就知道地址是否变化