• 剑指offer


    1.拷贝构造函数

    Line( const Line &obj);  √  //常量引用

    Line( Line obj);       ×

    形参复制到实参会调用拷贝构造函数,所以会形成无休止的递归调用从而导致栈溢出。

    2.运算符重载

    传参类型声明为常量引用。

    引用:从形参到实参就不会调用拷贝构造函数,比面无谓消耗,提高代码效率。

    常量:不会改变传入的实例的状态

    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);
    
        return *this;    //返回引用,以允许连续赋值
    }
    CMyString& CMyString::operator =(const CMyString &str)
    {
        if(this != &str)
        {
            CMyString strTemp(str);    //在构造函数里用new分配内存,保证了异常安全性
    
            char* pTemp=strTemp.m_pData;
            strTemp.mpData=m_pData;
            m_pData=pTemp;
        }
        //超出变量作用域,自动调用strTemp的析构函数,
        //把strTemp.m_pData所指向的内存(即原m_pData内存)释放掉
    
        return *this;
    }

    3.singleton

    4.sizeof

    sizeof(数组名) = n个元素*单个元素的大小

    sizeof(指针) = 4

  • 相关阅读:
    C语言编程练习41:ACboy needs your help again!
    C语言编程练习40:Ignatius and the Princess II
    C语言编程练习39:Solving Oder
    C语言编程练习38:火车出站
    C语言编程练习37:出栈合法性
    C语言编程练习36:赌徒
    C语言编程练习35:叠筐
    C语言编程练习34:Tr A
    网购手机被坑了?
    meta标签
  • 原文地址:https://www.cnblogs.com/holaworld/p/12374673.html
Copyright © 2020-2023  润新知