zoukankan      html  css  js  c++  java
  • 剑指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#中 类的多态
    字段与属性
    C# ASCII与字符串间相互转换
    TextBox控件常用方法总结
    使用hadoop mapreduce分析mongodb数据:(2)
    使用hadoop mapreduce分析mongodb数据:(1)
    Linux MPI集群配置
    VIM文本替换
    怎么解决python中TypeError: can't pickle instancemethod objects的这个错误
    LeetCode ZigZag problem
  • 原文地址:https://www.cnblogs.com/holaworld/p/12374673.html
Copyright © 2011-2022 走看看