C++ 在C+中使用*this+;类方法以完全覆盖自实例化

C++ 在C+中使用*this+;类方法以完全覆盖自实例化,c++,class,methods,this,instantiation,C++,Class,Methods,This,Instantiation,以下代码安全吗?(我已经知道它编译正确。) 这取决于执行情况。例如,如果赋值运算符依赖于类Tile的某个成员变量已经初始化(这是很常见的),并且在调用*此=赋值之前,该变量未由Tile构造函数初始化,则程序可能会运行到未定义的行为。它可能会工作。这取决于Tile&operator=(const Tile&)的方式已实现。但是,将*this赋值给一个新值并没有本质上的错误。如果您的复制构造函数没有做任何令人讨厌的事情,那么安全。代码是正常的,并且调用this上的赋值运算符,即使在构造函数中也是如此

以下代码安全吗?(我已经知道它编译正确。)


这取决于执行情况。例如,如果赋值运算符依赖于类
Tile
的某个成员变量已经初始化(这是很常见的),并且在调用
*此=
赋值之前,该变量未由
Tile
构造函数初始化,则程序可能会运行到未定义的行为。

它可能会工作。这取决于
Tile&operator=(const Tile&)的方式已实现。但是,将
*this
赋值给一个新值并没有本质上的错误。

如果您的复制构造函数没有做任何令人讨厌的事情,那么安全。

代码是正常的,并且调用
this
上的赋值运算符,即使在构造函数中也是如此。我认为这是一个非常干净、优雅的解决方案。即使一开始它不起作用,更改代码使其起作用也可能是一个清理问题。

这与问题有什么关系?如果构造函数没有正确初始化成员,则对该对象执行任何操作都可能调用未定义的行为。@sbi:没有任何操作。您可能有一个未使用的未初始化指针成员变量。在这种情况下,您可以安全地实例化和销毁对象。我的意思是这要视情况而定。对不起,那不能飞。这样的beast也可以分配给和从。@sbi:是的,但在调用分配之前不会调用UB。例如,如果您创建一个临时对象并通过引用传递它,则不会发生任何错误。再一次,我的观点不是它是好的还是坏的。我的观点是,视情况而定,让我看看代码。那是我不同意赫伯的一点。构造、甚至复制构造和赋值是两种不同的操作,这是有原因的。如果有什么区别的话,赋值操作符应该使用,也就是说:它确实使用复制构造函数,尽管比Herb的文章开始时使用的方法更好。
void Tile::clear()
{
    *this = Tile();
}

int main()
{
    Tile mytile;

    mytile.clear();
}