【String类】C++:String类的传统写法与现代写法
来源:互联网 发布:旅游购物 知乎 编辑:程序博客网 时间:2024/05/28 20:20
传统写法:
#include<iostream>#include<stdlib.h>using namespace std;class String{public: //构造函数是用系统传入的str去构造_STR String(char* str = "") :_str( new char[strlen(str) + 1]) { strcpy(_str, str); } //拷贝构造是将已存在的String s 类中的_str去构造_str。 String(String& s) :_str(new char[strlen(s._str) + 1]) { strcpy(_str, s._str); } //复制运算符重载已存在的String s 类中的_str去赋值给tmp。 //String& operator = (const String& s) //{ // if (&s != this) // { // delete[] _str; // char* tmp = new char[strlen(s._str) + 1]; // strcpy(tmp, s._str); // } // return *this; //} String& operator = (const String& s) { if (&s != this) { char* tmp = new char[strlen(s._str) + 1]; strcpy(tmp, s._str); //先释放后指向,否则_str无人管理会内存泄漏 delete[] _str; _str = tmp; } return *this; } ~String() { if (_str) { delete[] _str; } }private: char* _str; };void Test(){ String s1("s1"); String s2(s1);}int main(){ Test(); system("pause");}
现代写法:
#include<iostream>#include<stdlib.h>using namespace std;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(tmp._str, _str); } String& operator = (const String& s) { if (&s != this) { String tmp = s._str; swap(tmp._str, _str); } return *this; } ~String() { if (_str) { delete[] _str; } }private: char* _str;};void Test(){ String s1("s1"); String s2(s1);}int main(){ Test(); system("pause");}
本文出自 “Han Jing's Blog” 博客,请务必保留此出处http://10740184.blog.51cto.com/10730184/1745773
0 0
- 【String类】C++:String类的传统写法与现代写法
- String类深拷贝的现代写法和传统写法
- string的传统与现代写法
- 【C语言】【面试题】C++中String类浅拷贝,深拷贝的传统写法与现代写法
- string传统/现代写法
- string深拷贝的传统与现代写法
- C++ String的传统和现代写法的深拷贝
- 模拟实现String类--->现代写法
- 模拟实现String类----传统写法
- 模拟实现string(深浅拷贝,传统现代写法)
- String类的增删查改(深拷贝,现代写法)
- 【C语言】【面试题】C++中String类引用计数器的浅拷贝写法与深拷贝写法
- C++:【常见面试题】String类的写法
- 单链表类成员函数现代写法、传统写法
- C++面试中string类的一种正确写法
- C++面试中string类的一种正确写法
- C++面试中string类的一种正确写法
- C++面试中string类的一种正确写法
- Oracle去掉重复数据
- C语言:【动态顺序表】动态顺序表的初始化、打印、尾插PushBack、尾删PopBack
- C语言:【动态顺序表】动态顺序表的在指定位置插入元素Insert,以及指定元素Find
- 【C语言项目】注释转换
- 【String类浅拷贝的实现】C++:String类引用计数浅拷贝的两种实现
- 【String类】C++:String类的传统写法与现代写法
- 《剑指offer》字符串中的字符替换
- 【C++】实现动态顺序表的PushBack(),PopBack(),PushFront(),PopFront(),Find(),Insert
- 【C++】用类实现单向单链表的尾插PushBack(),尾删PopBack(),打印PrintSlist()。
- 【C++】实现双向链表的所有操作,包括逆置双链表(三种方法)
- 【C语言】单链表的所有操作的实现(包括PopBack、PushBack、PopFront、PushFront、Insert)
- 【继承与多态】C++:继承中的赋值兼容规则,子类的成员函数,虚函数(重写),多态
- 【C++】模版类实现普通类静态顺序表
- 【C++】认识模版函数