1、auto/decltype关键字
auto:编译器在编译时自动推导变量类型;
auto i = 10; // 10是int型,可以自动推导出i是int类型
decltype: 编译器在编译时自动推导表达式类型;
int& i = 1;
decltype(i) a = 2; // a是 int& 类型
2、nullptr
nullptr是c++11用来表示空指针新引入的常量值,如果表示空指针语义时建议使用nullptr而不要使用NULL,因为NULL本质上是个int型的0,并不是个指针。
3、final、override关键字
c++11关于继承新增了两个关键字,final用于修饰一个类,表示禁止该类进一步派生和虚函数的进一步重载,override用于修饰派生类中的成员函数,标明该函数重写了基类函数,如果一个函数声明了override但父类却没有这个虚函数,编译报错,使用override关键字可以避免开发者在重写基类函数时无意产生的错误。
4、右值引用
左值:有名字并且可以取地址;
右值:没有有名字并且不能取地址;
右值引用必须初始化,且只能采用右值进行初始化。
int&& i = 1; //右值引用方法 &&
右值引用通过移动构造函数和引动赋值运算符来实现移动语义,允许将资源的所有权转移;避免深拷贝中不必要的构造;解决浅拷贝中面向对内存重复释放内存的问题。
5、智能指针
本质上是一个类模板,对指针进行封装,用来动态管理内存,防止内存泄漏。
3.1 unique_ptr(独占式智能指针): 只能拥有一个指向某个对象的指针,在生命周期结束时释放所持对象的内存。不支持拷贝和赋值操作,但支持移动语义。
3.2 shared_ptr(共享式智能指针): 可以共享同一个对象的所有权,可以通过引用计数来管理内存。当最后一个共享式智能指针被销毁时,它会自动释放所持有的对象内存。支持拷贝和赋值操作,通过引用计数来实现内存的安全管理。