zoukankan      html  css  js  c++  java
  • 面试题1:赋值运算符函数(考虑异常安全性的解法)

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <cstring>
    #include <cstdlib>
    using namespace std;
    
    class CMyString
    {
    public:
        CMyString(char *str = nullptr) {
    
            m_data = new char[strlen(str) + 1];
            if (m_data == nullptr) {
                exit(1);
            }
            else {
                strcpy(m_data, str);
            }
        }
    
        CMyString(const CMyString& str)
        {
            if (this != &str)
            {
                CMyString strTemp(str.m_data);
    
                char *pTemp = strTemp.m_data;
                strTemp.m_data = m_data;
                m_data = pTemp;
            }
        }
    
        CMyString& operator = (const CMyString& str);
    
        void Print()
        {
            cout << m_data << endl;
        }
    
        ~CMyString() 
        {
            delete m_data;
        }
    
    private:
        char *m_data;
    };
    
    CMyString& CMyString::operator=(const CMyString& str)
    {
        if (this != &str) 
        {
            CMyString strTemp(str);
    
            char *pTemp = strTemp.m_data;
            strTemp.m_data = m_data;
            m_data = pTemp;
        }
    
        return *this;
    }
    
    
    int main()
    {
        CMyString a("douzi");
        CMyString b("love you");
        a.Print();
        b.Print();
    
        a = b;
        a.Print();
    
        a = a;
        a.Print();
    
        a = a = a;
        a.Print();
    
        b = b = a = a;
        b.Print();
    
        return 0;
    }
    • 先创建一个临时实例strTemp

    • 接着把strTemp.m_data和实例自身的m_data进行交换。由于strTemp是一个局部变量,程序运行到if外面会自动调用strTemp的析构函数,把strTemp.m_data所指向的内存释放掉。

    • 由于strTemp.m_data所指向的内存就是实例之前m_pData的内存,这样就相当于自动调用析构函数释放实例的内存

  • 相关阅读:
    [python]windows截图
    [python]PyPI使用国内源
    [MySQL]配置多个MySQL服务(Windows)
    [C#]中获取当前程序运行路径的方法
    [C#]统计文本文件txt中的行数(快速读取)
    [C#]获取连接MySql数据库及常用的CRUD操作
    html和css高级
    html和css进阶
    html和css入门
    Git 简介
  • 原文地址:https://www.cnblogs.com/douzujun/p/10519837.html
Copyright © 2011-2022 走看看