String类的重写

#include "stdafx.h"
#include
#include "SString.h"

SString::SString(char* pszbuf)
{
    if (NULL == pszbuf)
    {
        m_data = new char[1];
        m_data[0] = '\0';
    }
    else
    {
        int i_len = strlen(pszbuf);
        m_data = new char[i_len+1];
        strcpy(m_data,pszbuf);
    }
}

SString::~SString()
{
    if (NULL != m_data)
    {
        delete[] m_data;
        m_data = NULL;
    }
}

SString &SString::operator = (const SString &strTmp)
{

    //不许与给自己赋值
    if (this == &strTmp)
    {
        return *this;
    }
    else
    {
        delete[] this->m_data;
        this->m_data = NULL;
        DWORD dw = strlen(strTmp.m_data);
        this->m_data = new char[dw+1];
        strcpy(this->m_data,strTmp.m_data);
    }

}

SString::SString(const SString &strTmp)
{
    int n_len = strlen(strTmp.m_data);
    this->m_data = new char[n_len+1];
    strcpy(this->m_data, strTmp.m_data);

    //这个时候并没有给m_data赋值,m_data当时是一个野指针,不为空 delete出错。所以不能直接调用一斤重写的=操作运算

    //*this = strTmp;

   //解释SString tmp1("1111"); SString CSString = tmp;直接调用类的拷贝构造函数,因为现在是构造类对象;如果这里在拷贝构造函数中直接直接调用赋值才做会删除野指针导致崩溃。

  //解释SString tmp1("1111"); SString tmp2("2222"); tmp1 = tmp2;这个调用类的赋值运算。

}

bool SString::operator == (const SString&strTmp)
{
    int n_result = strcmp(this->m_data, strTmp.m_data);

    if (0 == n_result)
    {
        return true;
    }
    return false;
}


你可能感兴趣的:(C++基础)