百科不全书之 C++11新特性

1.统一的初始化方法 int arr[3]{1,2,3},int *p=new int[20] {1,2,3};
2.成员变量默认初始值 class b{ int m =1234}
6.基于范围的for循环:int ary[] for(int & e:ary )
7.在C+11中,对于defaulted函数,编译器会为其自动生成默认的函数定义体,从而获得更高的代码执行效率,也可免除程序员手动定义该函数的工作量
8.右值引用和move 语义:原来学的都是左值引用,&&右值引用,减少深拷贝的对象次数。
9.strcpy 不判断s是不是null,所以我们也不做这个。
10.哈希表(无序文件):在unordered_map中插入时间复杂度低,浪费内存。
11.引用正则表达式:头文件:regex
12.Lambda表达式:[](){}

std::bind

C++11中提供了std::bind。bind()函数的意义就像它的函数名一样,是用来绑定函数调用的某些参数的。
bind的思想实际上是一种延迟计算的思想,将可调用对象保存起来,然后在需要的时候再调用。而且这种绑定是非常灵活的,不论是普通函数、函数对象、还是成员函数都可以绑定,而且其参数可以支持占位符,比如你可以这样绑定一个二元函数auto f = bind(&func, _1, _2);,调用的时候通过f(1,2)实现调用。

 
int TestFunc(int a, char c, float f)
{
    cout << a << c<<f<<endl;
    return a;
}
 //std::placeholders是一个占位符。当使用bind生成一个新的可调用对象时,std::placeholders表示新的可调用对象的第 几个参数和原函数的第几个参数进行匹配,
auto bindFunc1 = bind(TestFunc, std::placeholders::_1, 'A', 100.1);
bindFunc1(10);

//参数的第一个位置为占位符std::placeholders::_2,这就表示,调用bindFunc3的时候,它的第二个参数和TestFunc的第一个参数匹配
auto bindFunc3 = bind(TestFunc,std::placeholders::_2,std::placeholders::_3,std::placeholders::_1);
bindFunc3(100.1, 30, 'C');

auto 关键字

定义的变量可以自动判断变量的类型。但是要初始化 auto i=100 尤其在定义容器时:函数的返回值也可以是auto 4.decltype:求表达式的类型 decltype(a) x1

智能指针 shared-ptr

头文件 使用方式:shared_ptr ptr1 shared_ptr ptr2(new A(2)) shared_ptr ptr1§ reset(为空表示释放,加入指针则表示托管) 空指针 nullptr 可以转换为bool型,但是不能变整型。

名词含义
std::auto_ptr有很多问题。 不支持复制(拷贝构造函数)和赋值(operator =),但复制或赋值的时候不会提示出错。因为不能被复制,所以不能被放入容器中。同时auto_ptr不能调用delete[],不能指向数组。在C++11中已经不建议使用
unique_ptr也不支持复制和赋值,但比auto_ptr好,直接赋值会编译出错。实在想赋值的话,需要使用:std::move。一般而言,这个智能指针实现了独占式拥有概念,意味着它可确保一个对象和其相应资源同一时间只被一个指针拥有。一旦拥有者被销毁或变成空,或开始拥有另一个对象,先前拥有的那个对象就会被销毁,其任何相应资源也会被释放。
shared_ptr基于引用计数的智能指针。可随意赋值,直到内存的引用计数为0的时候这个内存会被释放
weak_ptr弱引用。 引用计数有一个问题就是互相引用形成环,这样两个指针指向的内存都无法释放。需要手动打破循环引用或使用weak_ptr。顾名思义,weak_ptr是一个弱引用,只引用,不计数。如果一块内存被shared_ptr和weak_ptr同时引用,当所有shared_ptr析构了之后,不管还有没有weak_ptr引用该内存,内存也会被释放。所以weak_ptr不保证它指向的内存一定是有效的,在使用之前需要检查weak_ptr是否为空指针。

shared_ptrunique_ptr的主要区别在于前者是使用引用计数的智能指针。引用计数的智能指针可以跟踪引用同一个真实指针对象的智能指针实例的数目。这意味着,可以有多个std::shared_ptr实例可以指向同一块动态分配的内存,当最后一个引用对象离开其作用域时,才会释放这块内存。shared_ptr的引用计数本身是安全且无锁的,但对象的读写则不是,因为 shared_ptr 有两个数据成员,读写操作不能原子化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值