在某些项目开发中,经常会遇到需要频繁创建和销毁某些资源的情况。这些资源可能是内存、线程、数据库连接等。频繁地创建和销毁资源可能导致性能下降和资源浪费。为了解决这些问题,设计了一种称为“池技术”的策略。简单而言,就是预先创建一组资源,如内存、线程等,每次需要用时从池中取出一个资源,用完再放回去,因此采用**“池技术”使程序的效率更高**。典型的用空间换时间的方法。
std::shared_ptr
std::shared_ptr
是一种智能指针,它能够记录多少个 shared_ptr 共同指向一个对象,从而消除显式的调用 delete,每多一个shared_ptr指向同一个对象,该对象的计数就会+1,当引用计数变为零的时候就会将对象自动删除。
两种初始化方式:
shared_ptr
<int> sp1 (new
int(10)); //通过new构造数据对象shared_ptr
<int> sp2(make_shared
<int>(10)); //通过make_shared构造数据对象其区别:
make_shared
只分配一次内存,智能指针控制块和管理的对象存在同一块内存里。new
初始化智能指针需要调用两次内存分配,一次给控制块分配内存,一次给对象分配内存,这两个东西是不连续的,会造成内存碎片化。make_shared
有std::move
语义,在加上O2优化选项的时候,make_shared
会比new
快上将近1倍。Lambda表达式是C++11中新增的一种函数对象,它可以方便地定义一个匿名函数,从而简化代码的编写。Lambda表达式的本质是一个可调用对象,可以像函数一样被调用,也可以作为函数参数或返回值。
详解参考:
【C++】 Lambda表达式详解_c++ lambda-CSDN博客
std::move
C++11引入了右值引用和移动语义,为了提高性能和避免不必要的拷贝。右值引用是一种特殊的引用,它可以绑定到一个临时对象或者将要销毁的对象,从而可以将其资源转移给另一个对象。移动语义是一种利用右值引用实现的编程技巧,它可以让一个对象从另一个对象“窃取”资源,而不是进行深拷贝。
详解参考: