sending back a vector from a function

c++, reference, vector

Solution

Most C++ compilers implement return value optimization which means you can efficiently return a class from a function without the overhead of copying all the objects.

I would also recommend that you write:

vector<int> v(getLargeVector());

So that you copy construct the object instead of default construct and then operator assign to it.

Problem

How to translate properly the following Java code to C++? ``` Vector v; v = getLargeVector(); ... Vector getLargeVector() { Vector v2 = new Vector(); // fill v2 return v2; } ``` So here `v` is a reference. The function creates a new Vector object and returns a reference to it. Nice and clean. However, let's see the following C++ mirror-translation: ``` vector<int> v; v = getLargeVector(); ... vector<int> getLargeVector() { vector<int> v2; // fill v2 return v2; } ``` Now `v` is a vector object, and if I understand correctly, `v = getLargeVector()` will copy all the elements from the vector returned by the function to `v`, which can be expensive. Furthermore, `v2` is created on the stack and returning it will result in another copy (but as I know modern compilers can optimize it out). Currently this is what I do: ``` vector<int> v; getLargeVector(v); ... void getLargeVector(vector<int>& vec) { // fill vec } ``` But I don't find it an elegant solution. So my question is: what is the best practice to do it (by avoiding unnecessary copy operations)? If possible, I'd like to avoid normal pointers. I've never used smart pointers so far, I don't know if they could help here.

Original source