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类实现之写时拷贝

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值