Дұрыс әдіс (семантиканы жылжыту) C ++ 11-ге қоңырау шалатын функциядан std :: vector қайтару

Мен std :: vector (немесе басқа STL контейнерін) толтырғым келеді:

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

1. Жақсы көрінетін ктор, қымбат өнімділігі

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. Жақсырақ өнімділік, нашар көрінетін ктор

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_); }

Керек емес көшірмелер мен конструкторлық қоңырауларды болдырмау үшін get_vector функциясын бірінші мысалдан C ++ 0x көмегімен қайта жазуға бола ма (семантиканың мүмкіндіктерін жылжыту және т.б.)?

33
задан Loom 11 October 2012 в 12:18
поделиться