一、string类的实现:存放字符串的指针、构造函数、拷贝构造函数、析构函数、赋值运算符重载
1、无参数的构造函数
给数组初始化成,分配一个char空间存放‘\0’
2、带参数的构造函数
分配一个和传进来的参数多一的空间用来存放‘\0’,然后初始化时进行复制。
3、带缺省值的构造函数(用这个更好,不用考虑为空,都初始化成 "")
4、拷贝构造(浅拷贝、不采取)
吧传入的引用参数的指针指向的位置拷贝给自己的指针。相当于两个指针指向同一块空间。
注意:这样在析构的时候,这块空间会被释放两次,造成程序崩溃
5、拷贝构造(深拷贝)
给自己开辟一个和引用参数多一的空间,然后用strcpy函数,吧参数的_str拷贝给自己的,所以两个指针指向不同的内存。
6、拷贝构造(新方法)
先构造一个中间对象,让后调用swap函数和自己调换
7、赋值运算符重载
方法1、
方法2、
没有考虑空间申请失败,方法1 在空间申请失败时不会影响本身的数据,方法2中空间开辟失败后,自身也被delete。
方法3、
初始化一个对象,然后交换赋值。
方法4、(简洁)
直接交换参数。
8、析构函数
二、string类实现之写时拷贝
可以用一个静态的变量来计数,也可以用一块计数指针