对象中operator=中为什么要检查自赋值

如下图片

如果是对自身赋值难道你还去进行后面的处理?后面会将this以前的内存释放掉然后分分配新的再赋值这些都是无用功了。而且后面的操作谁也不能保证成功。

在赋值的时候,要将左边对象的资源给释放掉,将右边资源复制给左边。

如果类的私有数据成员有指针,那么同类的对象之间进行赋值时就要重新修改operator=()函数了,因为默认的赋值执行“浅复制”,就是只复制值。假如类demo包含私有指针,并构造了对象A和B。当B赋值给A时,如果执行“浅赋值”,那么A的指针和B的指针的值一致,指向相同的内存块,这是危险的,因为任何一个对象析构后另一个就没法释放指向的内存块了。还有一个坏处,就是=号左边的对象的指针指向的内存块成了垃圾,没法释放。所以必须重载operator=()函数。两个同类对象的值(这里指指针)相同,只是它们指向的内存块的内容一致,但地址不同。愚见

废话,假如说你对自身赋值的话,还需要后面的操作吗?

这个是C++编程思想吧,最近也在看,你需要仔细看之前和之后的代码例子就应该能理解。就拿“深赋值”来说,对于带有成员指针的不同对象之间的“深赋值”操作,被赋值对象的成员指针需要进行new操作以达到深赋值的目的,如果是自己赋值给自己,不加自赋值判断的话,难道还要重新进行new操作?这显然是有违背代码的原意的,因此可能会产生的逻辑实现差异和难以发现的错误。 总之这是一个C++编程规范,对于 =、+=、%= ...... 这些所有的赋值操作符函数,内部实现一般都会加上自赋值判断。