Reputation: 631
I want to make the function that returns a vector by reference. But the returned vector(returned_v
) is not same as vec.v
, but a copied vector. It means the vector is returned by value. How can I get the referenced vector from vector_reference()
?
class Vec {
public:
std::vector<int> v = {1, 2, 3};
std::vector<int>& vector_reference() {
return v;
}
};
int main() {
Vec vec;
std::vector<int> returned_v = vec.vector_reference();
returned_v.clear();
std::cout << returned_v.size() << std::endl; // result: 0
std::cout << vec.v.size() << std::endl; // result: 3
return 0;
}
Upvotes: 1
Views: 1743
Reputation: 11
The reference in the function vector_reference()
is the reference of vec.v
. However, returned_v
is a copy of vec.v
, not a referrence of it. Two ways can help you:
std::vector<int>& returned_v = vec.vector_reference();
std::vector<int> returned_v = std::move(vec.vector_reference()); //C++ 11
Upvotes: 0
Reputation: 172924
returned_v
is an independent object which gets copied from the return value of vec.vector_reference()
. You should declare it as reference too.
std::vector<int>& returned_v = vec.vector_reference();
Upvotes: 6