【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
原创粉丝点击