zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    OLAP ODS项目的总结 平台选型,架构确定
    ORACLE ORA12520
    ORACLE管道函数
    ORACLE RAC JDBC 配置
    ORACLE RAC OCFS连接产生的错误
    ORACLE 启动和关闭详解
    OLAP ODS项目的总结 起步阶段
    ORACLE RAC 配置更改IP
    ORACLE RAC OCR cann't Access
    ORACLE RAC Debug 之路 CRS0184错误与CRS初始化
  • 原文地址:https://www.cnblogs.com/wuchanming/p/3878270.html
Copyright © 2011-2022 走看看