我的一个函数以向量作为参数,并将其存储为成员变量。我正在使用如下所述的常量引用向量。
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);
}
我应该避免哪种方法,为什么?