剑指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 45. 把数组排成最小的数 剑指 Offer 61. 扑克牌中的顺子 剑指 Offer 40. 最小的k个数