String类的重写

本文详细介绍了C++中自定义的字符串类SString的构造、赋值、比较等基本操作,并通过源代码展示了其实现细节,旨在帮助读者理解C++字符串类的底层工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "stdafx.h"
#include <string.h>
#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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值