• 赋值运算符函数


    已知类:

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

    初级实现:

    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);    //分配内存时可能会因为内存不足导致异常,m_pData成为空指针,容易导致程序崩溃
        strcpy(m_pData, str.m_pData);
    
        return *this;
    }

    高级实现:

    CMyString& CMyString::operator = (const CMyString& str)
    {
        if (this != &str)
        {
            CMyString strTemp(str);           //创建临时实例,在构造函数中用new分配内存,若出现异常,不会执行下面逻辑,因此不会修改原有实例
            char* temp = strTemp.m_pData;      //将临时实例strTemp.m_pData与原有实例m_pData做交换
            strTemp.m_pData = m_pData;
            m_pData = temp;
        }                                      //局部变量出作用域后,自动调用strTemp析构函数,释放交换后原有实例的内存
    
        return *this;
    }
  • 相关阅读:
    hdu 6053 TrickGCD(筛法+容斥)
    hdu 6040 Hints of sd0061(stl: nth_element(arr,arr+k,arr+n))
    hdu 6055 Regular polygon
    POJ
    WPF页面后台代码InitializeComponent()报错
    C#更新packages
    git--撤销添加&放弃修改&代码冲突
    git--新建分支&提交代码
    foreach 改变集合时不能使用
    VirtualBox 共享文件夹设置
  • 原文地址:https://www.cnblogs.com/yapp/p/14303100.html
Copyright © 2020-2023  润新知