std :: vector不支持右值赋值

时间:2017-12-12 11:32:11

标签: c++ c++11 vector

这是我的测试代码:

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

1 个答案:

答案 0 :(得分:6)

它确实支持移动分配,但您试图滥用它。您通过const引用接受buffer。移动分配需要修改来源。你的编译器试图告诉你。

快速修复是通过非const引用接受。更好的解决方法是通过右值引用接受buffer。这样,当他们的矢量内容被盗时,来电者注定不会感到惊讶。

更好的修复是按值接受。这样调用者就可以完全控制传递缓冲区的创建方式。并且您的功能在更多实例中可用。