高效的传递向量到类中的setter

时间:2016-12-30 14:41:07

标签: c++ c++14

我上课了:

class Example
{
  const std::vector<int>& getMyVector() { return myVector; }
  //void setMyVector 
private:
  std::vector<int> myVector;
}

void methodCreatingNewMyVector(Example& example)
{
  std::vector<int> newMyVector;
  //some push_backs
  example.setMyVector(newMyVector);
}

如何实现setMyVector方法不复制向量并使用上面方法中的临时向量?我不想使用智能指针来存储myVector。我可以使用移动语义吗?怎么做?

2 个答案:

答案 0 :(得分:4)

只需提供一个@Override protected void onStart() { super.onStart(); LocalBroadcastManager.getInstance(this).registerReceiver((receiver), new IntentFilter(YourService.UPDATE_TIME) ); } @Override protected void onStop() { LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver); super.onStop(); } 重载,对setMyVector()进行右值引用并将对象移动到那里,例如:

std::vector<int>

显然,你要适当地调用这个函数:

void setMyVector(std::vector<int>&& newVector) {
    this->myVector = std::move(newVector);
}

答案 1 :(得分:1)

是的,您可以通过调用std::move()显式移动向量而不复制它。这会将向量转换为右值引用,std::vector构造函数有一个专门的构造函数来利用这种类型:

example.setMyVector(std::move(newMyVector));

请务必在setMyVector()中要求提供右值参考:

void setMyVector (std::vector<int> && vec)
                                   ^^rvalue reference