C++11新特性:智能指针与lambda表达式

1.智能指针

说到智能指针,我们不能不提到C++里面的动态内存管理。在C++里,我们通常使用new来动态分配内存,用delete来释放内存。这两个操作都需要我们自己写到合适的地方,但这样会存在一个问题:假如在new了之后在delete之前抛出异常,那么我们的代码很有可能就没有执行delete操作,从而导致new创建的内存一直无法释放。

那么怎么解决这个问题呢?

智能指针就是用来解决这个问题的,智能指针和常规的指针最重要的区别就是,它能够负责自动释放内存,其它方面和常规的指针一样。这么一来,就可以避免上面的问题了。

share_ptr是用来创建指针,结合以前的new用法:share_ptr<int> tmp=new int(10);

那么我们怎么知道share_ptr的对象是否还存在呢?我们通过weak_ptr,weak_ptr相当于一个工具,用来配合share_ptr使用,可以读取share_ptr的计数器值,当读取到的值为0时,share_ptr的对象也就不存在了。

 

2.lambda表达式

lambda表达式能够把一些函数直接写成表达式,无须函数名字,例如我们使用sort函数自定义比较时:

需要定义cmp函数,并调用cmp函数,但是假如使用lambda表达式,我们就无需要把比较的表达式封装成函数,如下:

sort(array.begin(),array.end(),[](const int&a,const int&b){return a>b;});

这样,我们就不需要因为自定义比较而特意去定义一个函数并给它起名字。

发表评论

电子邮件地址不会被公开。 必填项已用*标注