String类深拷贝的现代写法和传统写法

来源:互联网 发布:linux服务器端口开放 编辑:程序博客网 时间:2024/06/06 01:10

1.传统写法:老老实实开辟空间并复制内容

2.现代写法:借助中间变量,交换指针


#include<iostream>using namespace std;//String类传统写法namespace tradition{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);}//析构~String(){if(_str)delete[] _str;}//赋值运算符重载String& operator=(const String& s){if(this != &s)//防止自己给自己赋值{delete[] _str;//释放原空间_str = new char[strlen(s._str)+1];//开新空间strcpy(_str, s._str);//赋值}return *this;}char* GetStr(){return _str;}private:char* _str;};}//String类现代写法namespace modern{class String{public://构造,析构,打印,都和传统写法一样String(char* str = ""):_str(new char[strlen(str)+1]){strcpy(_str, str);}~String(){delete[] _str;}char* GetStr(){return _str;}//拷贝构造,赋值运算符重载另外写,借助中间变量,不用直接开辟空间String(const String& s):_str(NULL){String tmp(s._str);//构造函数swap(_str, tmp._str);}String& operator=(const String& s){if(this != &s){String tmp(s._str);swap(_str, tmp._str);}return *this;}private:char* _str;};}