c++ String 类之深浅拷贝

一、string类的实现:存放字符串的指针、构造函数、拷贝构造函数、析构函数、赋值运算符重载

1、无参数的构造函数

 给数组初始化成,分配一个char空间存放‘\0’

2、带参数的构造函数

分配一个和传进来的参数多一的空间用来存放‘\0’,然后初始化时进行复制。

3、带缺省值的构造函数(用这个更好,不用考虑为空,都初始化成 "")

4、拷贝构造(浅拷贝、不采取)

 吧传入的引用参数的指针指向的位置拷贝给自己的指针。相当于两个指针指向同一块空间。

注意:这样在析构的时候,这块空间会被释放两次,造成程序崩溃

5、拷贝构造(深拷贝)

 给自己开辟一个和引用参数多一的空间,然后用strcpy函数,吧参数的_str拷贝给自己的,所以两个指针指向不同的内存。

6、拷贝构造(新方法)

 先构造一个中间对象,让后调用swap函数和自己调换

7、赋值运算符重载

方法1、

 

方法2、

  没有考虑空间申请失败,方法1 在空间申请失败时不会影响本身的数据,方法2中空间开辟失败后,自身也被delete。

方法3、

  初始化一个对象,然后交换赋值。

方法4、(简洁)

  直接交换参数。

8、析构函数

二、string类实现之写时拷贝

可以用一个静态的变量来计数,也可以用一块计数指针

猜你喜欢

转载自blog.csdn.net/FF_YTA911/article/details/84818085