Maneira adequada (mover semântica) para retornar um vetor std :: da chamada de função em C ++ 11

Eu quero preencher std :: vector (ou algum outro contêiner STL):

class Foo {
public:
  Foo(int _n, const Bar &_m);
private:
  std::vector<Foo> fooes_;
}

1.Ctor de boa aparência, desempenho caro

std::vector<Foo> get_vector(int _n, const Bar &_m) {
  std::vector<Foo> ret;
  ... // filling ret depending from arguments
  return ret;
}

Foo::Foo(int _n, const Bar &_m) : fooes_(get_vector(_n, _m) {}

2. Melhor desempenho, pior aparência ctor

void fill_vector(int _n, const Bar &_m, std::vector<Foo> &_ret) {
  ... // filling ret depending from arguments
}

Foo::Foo(int _n, const Bar &_m) { fill_vector(_n, _m, fooes_); }

É possível reescreverget_vector função do 1º exemplo com C ++ 0x (mover recursos semânticos e assim por diante) para evitar cópias redundantes e chamadas de construto

questionAnswers(3)

yourAnswerToTheQuestion