【发布时间】:2015-12-02 09:27:59
【问题描述】:
我有点困惑为什么你会使用/需要一个移动构造函数。
如果我有以下情况:
vector fill(istream& is)
{
vector res;
for(double x; is >> x; res.push_back(x));
return res;
}
void bar()
{
vector vec = fill(cin);
// ... use vec ...
}
我可以通过添加 vector fill(istream& is, vector& res) 来消除返回 res 的需要,因此不调用复制构造函数。
那么有一个移动构造函数有什么意义呢?
【问题讨论】:
-
你认为永远不需要在 C++ 中复制对象吗?如果是这样,那你就错了。
-
一个原因是它更容易阅读。如果有函数调用
somefunction(var1, var2, var3),不清楚其中一些是否被修改。 -
您是否尝试过阅读有关移动构造函数和移动语义的一般主题?信息量很大,google一下就行了……
-
将
vector& res添加到fill()后,您需要在调用fill()之前 构造一个vector。你真的认为这是一种进步吗? -
@Ville-ValtteriTiittanen:那些没有被修改的参数应该是
const,不是吗? ;-)(是的,我知道,他们经常不是。)
标签: c++ move-semantics move-constructor