请考虑以下代码:
class A
{
public:
A(/* params */) {
// Fill m_data depending on params
}
std::vector<double> get_data() const noexcept {
return m_data;
}
private:
std::vector<double> m_data;
};
std::vector<double> get_data() {
return A{/* suitable params */}.get_data();
}
我想要的是,m_data
移动到函数get_data()
的调用者,即不应该复制。
我怎么能确定,情况确实如此?显然,A{/* suitable params */}
是一个右值。因此,它的成员变量m_data
在这种情况下是一个右值。那么,是否足以添加另一个成员函数
std::vector<double> get_data() && noexcept {
return std::move(m_data);
}