C++赋值运算符函数

为类添加赋值运算符函数:

类型定义

class CMyString
{
public:
    CMyString(char *pData = NULL);
    CMyString(const CMyString &str);
    ~CMyString(void);

    CMyString &operator=(const CMyString &);

private:
    char *m_pData;
};

要点:

1、返回值类型为该类型的引用,并在函数结束前返回实例自身的引用(即 *this);

2、是否把传入的参数声明为常量引用【const CmyString &str】;

3、是否释放自身已有内存,否则会造成“内存泄漏”;

4、是否判断参数与当前示例是指向的同一个对象;

解法:

/*
    适用于初级C++程序员的解法
*/
CMyString &CMyString::operator=(const CMyString &str)
{
    //首先检测两个指针是否指向同一个对象
    if (this == &str)
        return *this;

    //释放原内存
    delete []m_pData;
    m_pData = NULL;

    //重新申请内存
    m_pData = new char[strlen(str.m_pData) + 1];
    strcpy(m_pData,str.m_pData);

    //谨记:返回*this
    return *this;
}



/*
    适用于高级C++程序员的解法
*/
CMyString &CMyString::operator=(const CMyString &str)
{
    if (this != &str)                   //确保不指向同一个实例
    {
        CMyString strTemp(str);

        char *pTemp = strTemp.m_pData;  //指针指向需要更换的对象
        //strTemp.m_pData指向原来的对象,确保内存不足时可以找到原来对象的值
        strTemp.m_pData = m_pData;      
        m_pData = pTemp;                //更换原对象的值
    }   //自动调用strTemp的析构函数,销毁strTemp对象并回收pTemp的内存

    return *this;
}

 

posted @ 2014-07-30 15:59  Jessica程序猿  阅读(442)  评论(0编辑  收藏  举报