既然C++11支持移动语义,那么在从参数初始化数据成员时,我们是否应该尝试移动值而不是复制它?
以下是一个示例,展示了在C++11之前我如何处理这个问题:
struct foo {
std::vector<int> data;
explicit foo(const std::vector<int>& data)
: data(data)
{
}
};
在这里,将调用复制构造函数。
在C++11中,我们应该养成像这样编写代码的习惯吗:
struct foo {
std::vector<int> data;
explicit foo(std::vector<int> data)
: data(std::move(data))
{
}
};
在这里,如果传递的参数是左值,移动构造函数和复制构造函数都会被调用,但好处是如果传递的是右值,移动构造函数会被调用而不是复制构造函数。
我想知道是否还有什么我没有考虑到的东西。
data(std::move(data))
! - Kerrek SB