zoukankan      html  css  js  c++  java
  • 赋值运算符函数

    已知类:

    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;
    }
  • 相关阅读:
    java设计模式
    漏桶算法工具类
    http请求requestUtils
    去掉字符串中特殊符号造成的空格
    java 分布式id生成算法
    java枚举
    java 32个Java面试必考点
    配置tomcat下war包可以自压缩
    tomcat (选号)公司tomcat无页面解决
    docker 12 docker容器数据卷
  • 原文地址:https://www.cnblogs.com/yapp/p/14303100.html
Copyright © 2011-2022 走看看