【发布时间】:2020-05-06 11:15:41
【问题描述】:
我正在使用带有 etl::queue 的嵌入式模板库
https://www.etlcpp.com/queue.html
etl::queue 等同于 std::queue
为了避免复制,我想将元素实际移动到队列中。
现在我的设置是这样的
bool CETLConcurrentQueue<ElementType_T, u32QueueSize>::Add(ElementType_T &&element, const uint32_t u32Timeout)
{
//lock mutex...
queue.push(element);
//do further stuff
}
现在我不使用queue.push(std::move(element));,因为元素已经是一个右值引用
但是,queue.push(element); 调用元素复制构造函数(已删除)
我怎样才能调用元素移动构造函数?
【问题讨论】:
-
命名变量永远不是右值引用。该参数表明它在调用时将绑定到右值引用。但是您需要通过调用
std::move()将命名值转换为 r 值引用
标签: c++ c++11 move-semantics move-constructor