剑指offer

Posted holaworld

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指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

 

以上是关于剑指offer的主要内容,如果未能解决你的问题,请参考以下文章

剑指 Offer(第 2 版)完整题解笔记 & C++代码实现(LeetCode版)

LeetCode(剑指 Offer)- 14- I. 剪绳子

LeetCode(剑指 Offer)- 14- I. 剪绳子

剑指offer——第二十九天(动态规划“困难”)

剑指 Offer 45. 把数组排成最小的数 剑指 Offer 61. 扑克牌中的顺子 剑指 Offer 40. 最小的k个数

剑指 offer 刷题记录