0.思维导图
1.传值返回和引用返回
1.1传值返回
传值返回所返回的是当前对象的拷⻉
1.2引用返回
引⽤返回返回的是对象本身,
返回对象是⼀个局部变量,出了作⽤域便会 被销毁,
所以不可使⽤引⽤返回
出了作⽤域,引⽤对象还在,才可以引⽤返回 所以说如果⼀个变量⽣命周期只在最⼩的⼀ 个作⽤域中,那么最好是传值返回
2.匿名对象
3.动态内存管理
new的底层大概是这样的:
operator new+malloc的封装+构造函数
operator delete +析构函数
4.模板
5.构造函数&析构函数&拷贝构造函数
构造函数和析构函数属于六⼤默认成员函数,在使⽤此类实例化⼀个对象时会并进⾏相关操作时会⾃动调⽤
六⼤默认成员函数:
C98:默认构造函数,拷⻉构造函数,析构函数,拷⻉赋值运算符
C11:移动构造函数,移动赋值运算符
//如果我们不写构造/析构函数(默认成员函数),编译器也会⾃动⽣成
//编译器会如何⽣成默认构造函数
//对于内置类型成员变量,编译器会给予它们内存中存在的任意值 //对于⾃定义类型成员变量,编译器会调⽤其✦默认构造函数✦
//默认构造函数=不传参就可以调⽤的函数(⽆参,全缺省,我们没写编译器⾃动⽣成的,三者仅可 存在⼀个)
6.拷贝构造函数
//如果没有管理资源,⼀般不⽤写拷⻉构造,默认⽣成的拷⻉构造就可以了,就不如上⾯的Date
//如果是⾃定义成员,内置类型成员没有指向资源,也类似默认⽣成的拷⻉构造(浅拷⻉)就可以
//⼀般情况下,不需要写析构函数同时也不要写拷⻉构造函数
//如果内部有相关管理资源的指针,需要显示写析构函数,通常需要显示写拷贝构造完成深拷⻉
7.拷贝赋值运算符
8.继承
//base类中protected成员在派⽣类中可访问,但不可在int main函数中直接访问
//base类中private成员在派⽣类中不可⻅
9.组合
组合就是⼀个类中有另外⼀个类
10.多态
不同的对象去做相同的事情得到不同的结果
多态条件 1.虚函数重写 2.base类指针或者引⽤调⽤函数
//析构函数是否建议设计成虚函数
//析构函数⼀定设计成析构函数,只有这样,派⽣类才可以构成 重写(针对不同类特殊化处理)
//派⽣类的重写函数可加virtual也可以不加
11.纯虚函数
12.仿函数
//ps:operator()只是仿函数的标志, ⽽真正的"仿函数名" 是"class Compare"中的"Compare"
13.右值引用
14.移动构造
ps:右值引用涉及移动构造
15.λ-calculus
16.包装器
17.异常
18.智能指针
智能指针的作用:cpp中,凡是遇到动态资源管理,尽可能地交给智能指针
智能指针都在一个<memory>
总而言之就是构造函数保存指针资源,析构函数释放资源,以达到自动内存管理的作用
C++语法称其为RAII:资源获得立即初始化
通过对象的生命周期来保存资源
unique_ptr:禁止拷贝
shared_ptr/shared_array:引用计数的方式支持拷贝,
weaked_ptr:不同于上述指针,不支持直接管理资源 shared_ptr的循环引用会引起内存泄漏,配合此指针可以很好地解决此问题