我偶然发现了这段代码来重新建立类不变量:
class Foo {
// some stuff in here
public:
void clear() {
*this = Foo();
//operator=(Foo()); // commented out in favor of the line above
}
};
- 我假设对
operator=
的调用是合法的并且按预期工作,但会创建一个不必要的临时文件,以防类不可移动。因此,手动分配默认值可能会更有效,如果我们想扩展类,这很麻烦且容易出错。 *this = Foo()
,如果允许的话,可能会更有效,因为我假设复制省略可以在这里工作(不管类是可移动的)。
所以我的问题是:
*this = Foo();
语句是否合法?如果是,请提供标准引用- 什么更有效(前提是第一个要点是正确的)?
- 如果
Foo
是可移动的。 - 以防万一。
最佳答案
- 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++ 编译器都会采用复制省略。
关于c++ - 是 *this = Ctor();清除对象状态合法有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57553929/