在具有移动ctor的类中,我还有一个按值返回的函数:
MyClass::MyClass (MyClass&& other) { ... }
MyClass MyClass::function ()
{
MyClass result; result = <thus and so>; return result;
}
它实现了我希望的目标:它称为move ctor;像我所说的那样窃取结果的数据成员;将结果的指针数据成员设置为nullptr。
但是我读到的是,移动ctor取r值。结果不是r值:它是可以分配给并且曾经是的那种命名变量。这里发生了什么?我怎么知道移动ctor将接受什么,什么将不接受?
答案 0 :(得分:0)
我怎么知道移动ctor将接受什么,什么将不接受?
move构造函数接受一个右值。因此,要么花费一个临时时间(例如MyClass()),要么在不打算再次使用的左值上使用std :: move。
如果您有这样的一行,其中对象的类型为MyClass:
MyClass newobject = object.function();
编译器将看到您正在为新对象分配一个右值,并使用move构造函数。
让构造函数在function()中做什么不是更好吗?这样可以省去先创建类的实例,再从function()函数返回另一个实例的需要。