关于运算符重载,为什么要检查自赋值?
如题。
在重载赋值运算符时,通常要检查自赋值。(见c++编程思想)
为什么?书上说,自赋值有时会产生灾难性的后果,我没有见过,也想象不出来。谁可以解释一下?
谢谢!
问题点数:50、回复次数:6Top
1 楼Koorama(顺)回复于 2002-04-14 07:45:08 得分 10
为了避免把自己覆盖
对象被赋值前要释放自己的空间,赋值后就变成指向未分配空间的垂悬指针。
(详见林锐的《高质量C++编程》,清晰易懂)Top
2 楼babysloth(小懒虫虫)回复于 2002-04-14 09:56:55 得分 10
见Effective C++ Item 17
例如
class A
{
private:
char* val_;
public:
A& operator =(const A& v)
{
delete val_;
val_ = new char[strlen(v.val_) + 1];
strcpy(val_, v.val_);
return *this;
};Top
3 楼cssnow()回复于 2002-04-14 10:43:05 得分 0
完全赞同楼上的!babysloth(小懒虫虫) 释放自己后还要用自己!Top
4 楼zxy_zs(STL&C++)回复于 2002-04-14 10:58:33 得分 20
如果不进行自我赋值检查。就有可能出现一种情况。那是灾难性的。举例说。你在拆房子。如果你不先看看自己是否在房子里就直接拆了。那会是怎么样呢??想想就知道。Top
5 楼Betta(小新)回复于 2002-04-14 11:50:50 得分 0
在debug版本时 assert 一下赋值的参数不是this, 或添加是否同
一对象的比较函数
release版本就不必了,毕竟这是外部程序错误引起的
Top
6 楼swordkee(天天向上)回复于 2002-04-14 12:13:22 得分 10
shallow copy后但是desctractor调用两次,就会删除未知的空间,危险.Top




