我可以安全地将分配移动到“this”吗?

dba*_*dba 15 c++ move-semantics

我想知道通过使用移动赋值运算符来编写reset某个类的方法是否安全。Athis

所以而不是

A a{};
... // Do something with a
a = A();
Run Code Online (Sandbox Code Playgroud)

如果我能写

A a{};
... // Do something with a
a.reset();
Run Code Online (Sandbox Code Playgroud)

在哪里

void A::reset()
{
  *this = A();
}
Run Code Online (Sandbox Code Playgroud)

我在 godbolt ( https://godbolt.org/z/Edc3TT1aT )上玩了一下,生成的调试程序集与本示例中的 gdb 几乎相同。

eer*_*ika 5

一般来说,赋值给*this是不会错的。既不复制也不移动。

它是否正确取决于您的移动赋值运算符的作用以及您需要该reset函数执行的操作。如果作业做了正确的事情,那么它就是正确的。