这里在string.h里面使用cout会报错因为,在Text里面编译器只会往上找虽然找到了iostream但是,iostream被std围起来了,还没有展开 ,编译器只会向上看,下面虽然展开了,但是看不到
这里capacity可能是0或者随机值
Begin名字变了就不支持了范围for底层就是迭代器,*it赋值给ch
ch++不会改变str本身的内容 ,除非ch前面加引用&
const修饰的静态整形成员变量可以初始化(特例)
不加const的就不可以,只能在外面初始化
insert实现pos位置插入为了避免end进行整形提升(-1>=0)把end往后移一位或者end强转int
scanf和cin空格和换行都拿不到 ,getchar能拿到
cin是isoream的对象提供的有get
在这里编译器并不会优化,而是需要s去拷贝构造一个对象再给赋值给sub1
用一个已经存在的对象 去初始化另一个对象是 拷贝构造,这是经典的浅拷贝(会析构两次)
在这里 最好要初始化,因为this(s2)是内(类)置类型,我们没有写编译器不保证会初始化,所以跟tmp交换后,当析构tmp时(此时tmp里面的str,size,capacity是随机值)会出错
他俩的capacity都是15 ,但是sizeof也一样,为什么呢?明明字符串一样,因为如果字符串小于16(有个\0)会存到buff里面,超过16就不用存到buff了
为了避免浅拷贝析构两次,设置引用计数,s出了作用域不析构而是计数- - ,=1说明还有人指向这块空间,这就意味着拷贝的时候要增加引用计数,引用计数到0时候,说明是最后一个对象,再释放空间。
如果修改数据 例如tmp【0】=‘x’ 这时还带深拷贝 引用计数,为2时说明还有人指向这块空间,就只能深拷贝,然后计数--;
vs是深拷贝,llinux是浅拷贝
linux修改后 s1修改了s2不动