1. 类说明
1. 功能
- muduo的无界缓冲区,实际是生产者和消费者的问题,这个印象中…后面好像没用到过
- 这是个模板类
2. 继承
- noncopyable
2. 成员变量说明
- mutex_
- muduo锁,没什么可说的了
- notEmpty_
- muduo封装的条件变量
- queue_
- STL中的队列
3. 成员函数说明
1. 普通
- 构造函数
- 变量的初始化,注意条件变量的构造函数需要一个锁变量作为参数
- size()
- 返回队列大小
- put(T&)
- 生产者,把参数加入队列,条件变量notEmpty调用notify()
- put(T&&)
- 和上个函数的区别是这个参数使用的右值引用,加入队列的时候用的std::move()
- std::move的理解见下
- take()
- 消费者,当队列为空的时候,条件变量等待,直到不为空
- 取出队列的第一个元素并返回
4. std::move()
-
需要先理解左值右值,见这篇博客
-
std::move()见这篇博客
-
std::move并不能移动任何东西,它唯一的功能是将一个左值强制转化为右值引用,继而可以通过右值引用使用该值,以用于移动语义。从实现上讲,std::move基本等同于一个类型转换:static_cast<T&&>(lvalue);
-
C++ 标准库使用比如vector::push_back 等这类函数时,会对参数的对象进行复制,连数据也会复制.这就会造成对象内存的额外创建, 本来原意是想把参数push_back进去就行了,通过std::move,可以避免不必要的拷贝操作。对指针类型的标准库对象并不需要这么做.
-
std::move是将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝。