重载=号的时候,copy这一步使用深拷贝非常重要

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fighting123678/article/details/79979351
#include <iostream>
#include <cstring>
using namespace std;

class SString
{
private:
    char* s_;
    size_t len_;//size_t等价于unsigned int也就是>=0的意思;s_=newchar(2*len_);
    size_t siz_;//2*len_;空洞,对内存的使用更有利;分配内存空间;siz=2*len_;
public:
    SString():len_(0),siz_(0),s_(NULL) {}
    SString(const char* s);
    SString(const SString& s);
    void show();
    ~SString()
    {
        delete []s_;
        cout<<"destruction**********************"<<endl;
    }
    SString& operator=(const SString& s);
    friend ostream& operator<<(ostream& os,SString& s)
    {
        os<<s.s_<<endl;
        return os;
    }
    SString& copy(const SString& s);//拷贝的时候要考虑互拷,长度比较大小,能不能容得下;
};
SString::SString(const char* s):len_(0),s_(NULL)
{
    while(s[len_]!=0)len_++;
    siz_=2*len_;
    s_=new char[siz_];
    for(int i=0; i<len_; i++)s_[i]=s[i];
    s_[len_]=0;//等同于'\0';
}
SString::SString(const SString& s):s_(NULL),len_(s.len_),siz_(s.siz_)
{
    s_=new char[siz_];
    for(int i=0; i<len_; i++)s_[i]=s.s_[i];
    s_[len_]=0;
}
void SString::show()
{
    for(int i=0; i<len_; i++)
        cout<<s_[i];
    cout<<endl;
}
SString& SString:: operator=(const SString& s)//默认的等号只是把指针的地址给它了;
{
    cout<<"operator=::::::::";
    copy(s);
    return *this;
}
//ostream& operator<<(ostream& os,SString& s)

SString& SString:: copy(const SString& s)//非常重要;
{
    if(len_<s.len_)
    {
        delete []s_;
        s_=new char[s.len_*2];
        len_=s.len_;
        siz_=s.siz_;
    }
    for(int i=0; i<len_; i++)s_[i]=s.s_[i];
    s_[len_]=0;
    return *this;
}
int main()
{
    char a[10]="efghij";
    SString str1,str4;
    SString str2("xyabcd");
    SString str3(str2);//如果没有赋值的话,要考虑一下这块内存够不够;
    str4=str1=str2;//在类内部仅有这种简单的赋值的话,也就是浅拷贝,从来没有new过运算符的时候需要重载运算符,从而给它分配一个新的空间;
//    str2.show();
//    str3.show();
//    str1.show();
//    str4.show();
    cout<<str1<<endl;
    cout<<str2<<endl;
    cout<<str3<<endl;
    return 0;
}
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页