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