重载赋值运算符

应当注意以下几点:

1.是否将返回值类型声明为该类型的引用,否则无法做连续赋值

2.是否将传入的参数声明为常量引用,如果不是常量,不能保证不会修改传入的参数,如果不是引用,会调用一次拷贝构造函数影响代码的效率。

3.是否判断赋值的两个操作数是同一个实例

4.是否删除被赋值对象的内存,否则会产生内存泄露

程序代码如下:

#include<iostream>
#include<cstring>
using namespace std;
class Mystring
{
public:
    Mystring &operator=(const Mystring &str);
    Mystring(char *pdata=NULL)//带默认值的构造函数
    {
        data=pdata;
    }
    Mystring(const Mystring &str)//拷贝构造函数
    {
        data=str.data;
    }
    ~Mystring() //析构函数
    {
    }
    void show()
    {
        cout<<data<<endl;
    }
private:
    char* data;
};
Mystring &Mystring::operator=(const Mystring &str)
{
    if(&str!=this)//如果&str==this则不必赋值
    {
        delete data;//先释放原有空间
        data=NULL;
        data=new char[strlen(str.data)+1];//为指针初始化空间
        strcpy(data,str.data);//赋值

    }
    return *this;
}
int main()
{
    Mystring str1("hello"),str2;//声明两个类对象
    str1.show();
    str2=str1;//调用自定义赋值方法
    str2.show();
    str1=str1;//自己给自己赋值
    str1.show();
    return 0;
}
原文地址:https://www.cnblogs.com/runninglzw/p/4469683.html