这是我的测试代码:
void Test::test(const std::vector<uint8_t>& buffer) {
std::vector<uint8_t> data;
data = std::move(buffer);
}
Run Code Online (Sandbox Code Playgroud)
这段代码似乎毫无意义,这只是一个例子.我在我的ide中使用代码导航来找出=运算符的实现,我发现当前处理的是一个operator=(const vector<_Tp, _Alloc>& __x),它正在执行复制作业.
我搜索了整个文件,没有任何功能operator=(vector<_Tp, _Alloc>&& __x),所以我如何从移动和rvalue featrue中受益?
我的c ++标题在/usr/include/c++/5,我检查的文件是vector.tcc.
它确实支持移动分配,但您试图滥用它.你接受bufferconst引用.移动分配需要修改源.你的编译器试图告诉你.
快速修复是通过非const引用接受.更好的解决方法是buffer通过rvalue引用接受.这样,当他们的矢量内容被盗时,来电者注定不会感到惊讶.
在更好的解决方法是按值接受.这样调用者就可以完全控制传递缓冲区的创建方式.并且您的功能在更多实例中可用.