隐式生成的移动构造函数如何在c ++中工作?

时间:2017-07-22 02:29:34

标签: c++

所以移动构造函数:

foo(foo &&)

是在c ++程序中隐式生成的。我不明白为什么它需要在参数数据类型旁边有一个双符号。我理解双&符号表示对rvalue的引用,但我不知道如何将其应用于此上下文。

1 个答案:

答案 0 :(得分:2)

移动构造函数的目的是获取将要销毁的对象资源的所有权,以节省副本的成本。无论如何,即将被销毁的对象是r值。因此,移动构造函数的参数类型是对r值的引用。

它还能做什么?它不能是l值引用,也就是复制构造函数。而且我们不能通过值来获取,因为这将调用复制构造函数(并且也与它不明确),从而破坏了移动构造函数的整个目的。