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