«Текущий совет по этому вопросу:« Я не думаю, что вы обязательно в курсе этого ..

из моих функций берет вектор в качестве параметра и сохраняет его как переменную-член. Я использую постоянную ссылку на вектор, как описано ниже.

class Test {
 public:
  void someFunction(const std::vector<string>& items) {
   m_items = items;
  }

 private:
  std::vector<string> m_items;
};

Однако иногдаitems содержит большое количество строк, поэтому я хотел бы добавить функцию (или заменить функцию новой), которая поддерживает семантику перемещения.

Я думаю о нескольких подходах, но я не уверен, какой выбрать.

1) unique_ptr

void someFunction(std::unique_ptr<std::vector<string>> items) {
   // Also, make `m_itmes` std::unique_ptr<std::vector<string>>
   m_items = std::move(items);
}

2) пройти по значению и двигаться

void someFunction(std::vector<string> items) {
   m_items = std::move(items);
}

3) значение

void someFunction(std::vector<string>&& items) {
   m_items = std::move(items);
}

Какой подход мне следует избегать и почему?

Ответы на вопрос(4)

Ваш ответ на вопрос