是 *this = Ctor();清除对象状态合法有效?

Is *this = Ctor(); legal and efficient for clearing an object's state?

我偶然发现了这段重新建立 class 不变量的代码:

class Foo {
  // some stuff in here
public:
  void clear() {
    *this = Foo();
    //operator=(Foo()); // commented out in favor of the line above
  }
};

所以我的问题是:

  • Is the statement *this = Foo(); legal? If yes, please provide a reference to the standard

这是合法的。它遵循可以通过取消引用的指针分配值的标准。

我不认为我们可以在 c++ 标准中找到任何提及这种情况的内容,因为它不是您认为的特殊情况
分配取消引用的 *this 指针与任何其他指针一样工作。

  • What is more efficient (providing that the first bullet point is true)?
    • In case Foo is movable.
    • In case it's not.

在效率方面没有差异。任何像样的现代 c++ 编译器都会采用复制省略。