C++ string类的简单实现(俩种写法)
2018-04-01 18:45
519 查看
首先是传统写法:
(深拷贝)给要拷贝构造的对象重新分配空间。(浅拷贝)是对对象的简单拷贝,让几个指针都指向同一块地址空间,在释放这段空间的时候会产生“对已释放的空间再次释放”,导致程序中断。
所以String类的实现是用的深拷贝,如果用浅拷贝,当释放空间会把有用的空间释放掉,因为每次函数完成后会调用析构函数。
传统写法:
传统写法用的是strcpy函数需先创建一个空间把需要拷贝的拷贝过去 然后释放class String { public: String() :_str(new char[1]) { _str='\0'; } String(char *str="") :_str(new char[strlen(str)+1]) { strcpy(_str,str); } String(const String &s) :_str(new char[strlen(s._str)+1]) { strcpy(_str,s._str); } String& operator=(const String &s) { if (this!=&s) { char *tmp=new char[strlen(s._str)+1]; delete[]_str; strcpy(tmp,s._str); _str=tmp; } return *this; } ~String() { if (_str!=nullptr) { delete[]_str; } } char *c_str() { return _str; } private: char *_str; };
现代写法:
利用的是swap函数交换。class String { public: String(char *str="") :_str(new char[strlen(str)+1]) { strcpy(_str,str); } String(const String &s) :_str(NULL) { String tmp(s._str); swap(_str,tmp._str); } String& operator=(const String & s) { String tmp(s); swap(_str, tmp._str); return *this; } char *c_str() { return _str; } ~String() { if (_str!=NULL) { delete[] _str; } } private: char *_str; };
相关文章推荐
- C++ String类的简单实现1
- Oracle_PL/SQL的基本写法_BEGIN_END块结构及简单的事务实现
- C++中实现singleton(单例模式)的最简单写法
- Oracle_PL/SQL的基本写法_BEGIN_END块结构及简单的事务实现
- 一个C++ String类的简单实现
- iOS基本控件基于点语法实现,写法简单由你定义
- C++ string类的简单实现
- PL/SQL的基本写法、BEGIN_END块结构及简单的事务实现
- C#/.NET 实现MD5加密的简单写法
- 微信小程序 —— 瀑布流简单写法(css3属性加wx:if判断轻松实现)
- php实现斐波那契数列的简单写法
- php实现斐波那契数列的简单写法
- C++ string类的简单实现
- C++ String类的简单实现与思考
- C++ string类的简单实现
- Oracle_PL/SQL的基本写法_BEGIN_END块结构及简单的事务实现
- ssm的简单实现以及配置ehcache
- jsp转html,工具类,网站静态化的一种简单实现方法!
- 利用bootstrap实现简单页面设计
- Java语言实现简单FTP软件------>FTP软件远程窗口的实现(六)