Type &Type::operator=(Type &&rhs)
{
if(this == &rhs) //is there any need of self-assignment .
returh *this ;
}
...
}
//因为它将在 r-value 上调用,所以为什么要自赋值?
Type &Type::operator=(Type &&rhs)
{
if(this == &rhs) //is there any need of self-assignment .
returh *this ;
}
...
}
//因为它将在 r-value 上调用,所以为什么要自赋值?
假设您的类拥有一个指向它分配的某个缓冲区的指针。现在,在一个幼稚的移动赋值运算符中,您将:
这不会使您取消引用空指针,但是 - 您刚刚丢失了缓冲区中的所有数据,这可能不是您想要的,也不是用户期望的。
上述规则有一个(狭窄的)例外:移动分配运算符对于自分配是“幂等的”的情况。例如,如果您的赋值运算符仅涉及成员的赋值 - 那么自赋值就像常规赋值一样是安全的(相信成员的自赋值实现是有效的)。什么都不会改变或丢失。
这个规则的例外确实很窄,因为以上对于我给出的示例大部分都是正确的——在这种情况下,您将使用默认的移动赋值运算符。尽管如此,仅仅因为您没有在某人的代码中找到此检查并不意味着存在错误。