【发布时间】:2021-12-12 15:04:56
【问题描述】:
要在std::vector 上启用移动语义,我需要按值传递吗?所以编译器不会复制元素而只是移动它们?
例子:
class data
{
public:
void setMyData(vector<string> sourceData)
{
private_data_ = sourceData;
}
private:
vector<string> private_data_;
};
【问题讨论】:
-
这能回答你的问题吗? What is move semantics?
-
你可能只需要
void setMyData(const vector<string> & sourceData)。这里sourceData是对您传递的向量的常量引用。不涉及复制。setMyData对向量做了什么? Mabe,这是一个XY Problem,请确保您需要告诉我们更多信息。 -
@Jabberwocky 纠正我,如果我错了,但是如果你通过 const 引用传递,如果我想要将内存从一个对象移动到另一个对象,那么 sourceData 怎么可能是一个空向量,因为我不想要复制矢量但只是移动它?
-
我想我得到了你想要的。请确认: : 当你打电话给
somedata.SetMyData(somevector);之后somevector应该是空的吗?
标签: c++ c++11 stdvector move-semantics c++-standard-library