«Текущий совет по этому вопросу:« Я не думаю, что вы обязательно в курсе этого ..
из моих функций берет вектор в качестве параметра и сохраняет его как переменную-член. Я использую постоянную ссылку на вектор, как описано ниже.
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);
}
Какой подход мне следует избегать и почему?