string类的深浅拷贝问题
字符串是我们在编写程序的时候经常用的到的。C++库已经帮我们实现了一个功能更加强大的字符串类string,我们要去了解它是怎么实现的。
只要是涉及到 string类的地方多少都会涉及到深浅拷贝的问题。在C++中,在用一个对象初始化另一个对象时,只复制了成员,并没有复制资源,使两个对象同时指向了同一资源的复制方式称为浅复制。
深拷贝是将指向内容复制到给当前对象新分配的缓冲区中的一种复制方式。
下面就是自己实现的深拷贝string类:
#include<iostream>#include<string.h>usingnamespacestd;classString{public:String(constchar*str=""):_str(newchar[strlen(str)+1]){strcpy(_str,str);}//深拷贝String(constString&s):_str(newchar[strlen(s._str)+1]){strcpy(_str,s._str);}String&operator=(constString&s){if(this!=&s){delete[]_str;_str=newchar[strlen(s._str)+1];strcpy(_str,s._str);}return*this;}////现代写法//String(constString&s)//:_str(NULL)//{//Stringtmp(s._str);//swap(tmp._str,_str);//}//String&operator=(constString&s)//{//if(this!=&s)//{//_str=NULL;//Stringtmp(s);//swap(tmp._str,_str);//}//return*this;//}private:char*_str;};
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。