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;
    }
  • 相关阅读:

    链表
    队列
    稀疏数组
    SQL——流程控制
    SQL——存储过程与函数
    SOA
    MVC模式
    《一线架构师实践指南》--阅读笔记三
    《一线架构师实践指南》-阅读笔记二
  • 原文地址:https://www.cnblogs.com/yapp/p/14303100.html
Copyright © 2011-2022 走看看