String类练习

#include <iostream>
#include <cstring>
using namespace std;

class String
{
public:
    String(const char* str = NULL)
    {
        m_data = strcpy(new char[strlen(str?str:"")+1],str?str:"");
    }
    ~String()
    {
        if(m_data)
            delete[] m_data;
    }
    String(const String& that)
    {
        m_data=strcpy(new char[strlen(that.m_data)+1],that.m_data);
    }

    String& operator=(const String& that)
    {
        if(&that != this)
        {
            //初级
            //delete[] m_data;
            //m_data = strcpy(new char[strlen(that.m_data)+1],that.m_data);

            //中级
            //char* temp = new char[strlen(that.m_data)+1]);//如果分配失败,会抛出异常,不会执行下面代码
            //delete[] m_data;
            //m_data = strcpy(temp,that.m_data);

            //高级
            String str(that);
            swap(m_data,str.m_data); //实现代码复用
        }
        return *this;
    }

    char* c_str() const
    {
        return m_data;
    }
private:
    char* m_data;
};

int main()
{
    String s1("Hello Word");
    cout << s1.c_str() << endl;
    String s2(s1);
    cout << s2.c_str() << endl;
    return 0;

}
原文地址:https://www.cnblogs.com/SamRichard/p/3493598.html