Одна из моих функций принимает вектор как параметр и сохраняет его как переменную-член. Я использую константную ссылку на вектор, как описано ниже.
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) rvalue
void someFunction(std::vector<string>&& items) {
m_items = std::move(items);
}
Какой подход следует избегать и почему?