我上课了:
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。我可以使用移动语义吗?怎么做?
答案 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