【发布时间】:2017-10-03 16:09:34
【问题描述】:
我的一个函数将向量作为参数并将其存储为成员变量。我正在使用对向量的 const 引用,如下所述。
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);
}
我应该避免哪种方法以及为什么?
【问题讨论】:
-
这完全取决于您希望该类的用户如何与之交互。如果您想知道他们将向量提供给您的班级,您可以使用 3 或 1。如果您想让他们保留限制您为 2 的向量的副本。
-
除了 unique_ptr 之外的任何东西。
-
@xaxxon 如果调用者使用 std::move 则不会。那只会将内部缓冲区指针交换到成员,这非常便宜
标签: c++ c++11 vector move unique-ptr