string类的深浅拷贝,写时拷贝
我们提供的服务有:成都做网站、成都网站制作、成都外贸网站建设、微信公众号开发、网站优化、网站认证、鹰潭ssl等。为数千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的鹰潭网站制作公司浅拷贝:多个指针指向同一块空间,多次析构同一块内存空间,系统会崩溃。(浅拷贝就是值拷贝)
深拷贝:给指针开辟新的空间,把内容拷贝进去,每个指针都指向自己的内存空间,析构时不会内存崩溃。
#include#include using namespace std; class String { public: String(const char*str) :_str(new char [strlen(str)+1]) { strcpy(_str,str); } //String(const String& str) //浅拷贝 // :_str(str._str) // {} //String &operator=(const String& str) //{ // if(this!= &str) // { // _str = str._str; // } // return *this; //} String(const String& str) //深拷贝 :_str(new char[strlen(str._str)+1]) { strcpy(_str,str._str); } String &operator=(const String& str) { if(this!=&str) { //delete[] _str; //_str=new char [strlen(str._str)+1]; //strcpy(_str,str._str); _str=str._str; } return *this; } ~String() { if(_str) { cout<<"~String()"< 写时拷贝:会存在一个计数器,并且多个对象指向同一块空间,每次创建一个新的对象时计数器加++,销毁时计数器--,直到计数器count=0时析构。
class String { public: String(const char*str) :_str(new char [strlen(str)+1]) ,_count(1) { strcpy(_str,str); } String(const String& str) :_str(str._str) { _count++; } String &operator=(const String& str) { if(this!= &str) { _str = str._str; } return *this; } ~String() { if(--_count == 0) { cout<<"~String()"<另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
分享名称:string类的深浅拷贝,写时拷贝-创新互联
本文来源:http://chengdu.cdxwcx.cn/article/diedpd.html