1,对象的指针优化,右值引用的优化
1观看顺序
对象使用过程中调用了那些方法->
c++对于对象构造的优化:用临时对象生成新对象的时候,临时对象就不产生了,直接构造新对象就行了。
生成临时对象的方法
const Test &ref = Test(50) √
Test &ref = Test(50) ×
c++11新检查机制vs2017+之后
指针指向的临时对象会被析构但是引用的临时对象不会被析构。
对象的构造与析构顺序
左值:有内存,有名字、
右值:没名字或者没内存如常量数字,临时量
std::move :将左值变为右值。
std::forward :将对象的值完美转化,也就是说输入左返回左,输入右返回右(因为编译器认为右值也是一种左值)
对象优化的三条准则:
1.函数参数传递过程中对象优先按引用传递,不要按值传递
2.函数返回对象的时候,应该优先返回一个临时对象,而不是一个定义过的对象
3.接收返回值是对象的函数调用的时候,优先按照初始化的方法接收,而不是按赋值的方法接收。
第三章:智能指针
1、自己实现智能指针
2、不带计数引用的智能指针auto ptr,scoped_ptr,unique_ptr
3、带计数引用的智能指针shared_ptr,weak_ptr
4、智能指针的交叉引用(循环引用)问题
5、多线程访问共享对象问题
6、自定义删除器
智能指针:保证能做到资源的自动释放!!!
利用栈上的对象出作用域会自动析构的特征,来做到资源的自动释放
使用不带计数的智能指针时,推荐使用unique_ptr,因为使用std::move来把当前对象的资源传给下一个调用的对象,更形象。而auto_ptr则是隐式的传给,容易忘记。