您的位置:首页 > 运维架构

等号重构(operator=)函数中应该注意的问题

2014-08-01 11:10 267 查看
编写等号运算符重构函数(operator=)时,有些问题是需要注意的:

注意1:等号运算符重构函数(operator=)中应该处理“自我赋值”

注意2:等号运算符重构函数(operator=)返回一个指向*this的引用(reference to *this)

注意3:当一个类中含有引用(reference)成员,则必须程序员自己定义一个等号运算符重构函数(operator=)

注意1:等号运算符重构函数(operator=)中应该处理“自我赋值”

有些人可能觉得“自我赋值”就是将自己的值赋给自己,自己本身的值也不会改变。不处理“自我赋值”问题也不是很大呀,只是要程序浪费一次的赋值时间而已。其实这个想法是很糟糕的。对于“自我赋值”如果操作不当的话,会引起程序的崩溃。请看下面的程序:

注意2:等号运算符重构函数(operator=)返回一个指向*this的引用(reference to *this)

这是为了能够实现“连锁赋值”,例如

int x,y,z;

x=y=z=16;

B & operator=(B & c){

...

return *this;

}

B a,b,c;

a=b=c;

注意3:当一个类中含有引用(reference)成员,则必须程序员自己定义一个等号运算符重构函数(operator=)

这个可以参考我另外一篇博文《定义一个空类时,C++到底默默编写了哪些函数?》中所提及的问题3:如果要对一个含有“reference成员”的类进行赋值操作,可以依赖编译器生成的赋值重构函数(operator=)吗?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: