If you want to return a large (or expensive to copy) object from a function, you can either return it directly:
std::vector<std::string> Generate();
Or return it through an out parameter:
void Generate(std::vector<std::string>& out);
The first relies on the compiler to perform RVO to elide the extra copies, which should make it just as performant as the second version. But RVO isn't exactly difficult to inadvertently defeat, causing a lot of copying overhead.
So in general, which do you prefer any why?