了解什么是移动语义?


嗨,实际上我正在尝试理解移动语义,但实际上我并没有掌握理论。 唯一的疑问是移动语义如何使用移动函数在移动构造函数中移动 bcz,理论认为将所有权转移到另一个资源意味着复制构造函数将调用正确的方法。 我不知道移动构造函数如何工作,无论如何它需要复制正确。 因此,请帮助我详细描述移动语义如何工作以及移动构造函数之后的对象地址信息。

我尝试过的:

试图理解移动语义,但有一些疑问。

解决方案1

为了理解移动语义,首先您必须理解什么是临时对象。 也就是说,任何动态创建的对象都会立即被丢弃:

C++
class A{/*assume it has functionality*/};

A a; // Solid object
A a1 = A(/* constructor parameter(s)*/); // Where as a1 is solid, the RValue assignment is a temporary objest which when discarded triggers destructor semanticts

因此,移动语义表示将 A() 移动到 a1 中,而不是像有 2 个对象暂时占用内存那样进行复制。

只要实现了正确的复制构造函数和赋值,即使没有移动语义,这也可以工作。 但移动语义消除了冗余副本,例如对象尺寸巨大时。

コメント

タイトルとURLをコピーしました