模拟实现string(深浅拷贝,传统现代写法)
来源:互联网 发布:unity3d 联机游戏 编辑:程序博客网 时间:2024/06/17 04:06
模拟实现string
浅拷贝
首先我们了解一下浅拷贝
浅拷贝是系统自动生成的也叫做值拷贝。
class String{public: String(char* str) :_str(str) {} String(const String& s) :_str(s._str) {} ~String() { delete[] _str; } 只能释放一次private: char* _str;};void Test1(){ String s1("s1"); String s2(s1);}
我们在运行这段代码时候程序会崩溃,这是为什么呢,用一幅图理解一下
出现这种问题我们的解决方案有两种
1,深拷贝
2,写时拷贝
深拷贝的写法有两种
一种是传统写法一种是现代写法
深拷贝——传统写法
class String{public: 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); } char &operator[](size_t pos) { return _str[pos]; } String &operator=(const String &s) { if (this != &s) { delete _str; _str = new char[strlen(s._str) + 1]; strcpy(_str, s._str); } return *this; } ~String() { delete[] _str; } const char* GETStr() { return _str; }private: char*_str;};
深拷贝——现代写法
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); } char &operator[](size_t pos) { return _str[pos]; } String &operator=(const String &s) { if (this != &s) { String tmp(s); swap(_str, tmp._str); } return *this; } String &operator=(String s) { swap(_str, s._str); return *this; } ~String() { delete[] _str; } const char* GETStr() { return _str; }private: char*_str;};
这是我们深拷贝的两种写法
那么深拷贝在析构函数这里是怎么做到的呢
总结传统写法和现代写法:
传统写法:可读性高
现代写法:简洁 ,new/delete都在统一的地方,可维护性高
阅读全文
1 0
- 模拟实现string(深浅拷贝,传统现代写法)
- String类深拷贝的现代写法和传统写法
- string传统/现代写法
- C++ String的传统和现代写法的深拷贝
- string深拷贝的传统与现代写法
- 模拟实现String类--->现代写法
- 模板2——顺序表的实现(现代写法的进一步解析,更深层次的深浅拷贝)
- 模拟实现String类----传统写法
- 【C语言】【面试题】C++中String类浅拷贝,深拷贝的传统写法与现代写法
- string的传统与现代写法
- c++ 深浅拷贝(传统写法 xain'dai'xie'fa)
- 深浅拷贝(String类)
- C++String深浅拷贝
- string--深浅拷贝
- String类的增删查改(深拷贝,现代写法)
- 【String类】C++:String类的传统写法与现代写法
- String类的实现与深浅拷贝问题
- C++深浅拷贝——实现String类
- CSDN上传资源规则之删除及其删除资源的3种方法
- XCode7以上免证书真机调试教程
- apk破解(二) 简单修改一个so文件
- Nginx+Tomcat代理环境下JS无法完全加载问题的处理
- MyEclipse中Maven配置
- 模拟实现string(深浅拷贝,传统现代写法)
- linux之文本操作命令
- 解决Android 打包后 so文件不完整导致程序崩溃
- A
- Centos5.4安装Virtualbox
- 命运
- 如何在logstash的配置文件里边删除csv中columns中多余的field字段
- Activity或是Fragment中下拉刷新,上推加载的Adapter这样写
- PHP正则表达式中的元字符的功能详细介绍