等号重构(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=)吗?
注意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=)吗?
相关文章推荐
- rails代码性能重构之 migration应该注意的问题
- 显示调用DLL 应该注意DLL导出函数的调用约定问题
- fgets函数使用时应该注意的问题
- Qt中控件对象访问成员函数时应该注意的问题
- [BTS]创建WebService时应该注意的问题
- 读取DataList控件中Labe控件应该注意的问题
- JAVA学习中应该注意的一些简单问题?
- [.net中]数据操作应该注意的问题
- Java和jsp编程中应该注意的几个常见问题
- 开发BS系统中应该注意的一些问题
- 读取DataList控件中Labe控件应该注意的问题——'/>(2006-04-28)
- 使用存储过程中应该注意的问题(原创)
- 使用梅花雨日历控件应该注意的问题
- JAVA编程中应该注意的问题
- 部署ASP.Net 2.0应该注意的问题
- 使用prototype.js 的时候应该特别注意的几个问题.
- Web项目中用到JNI时应该注意的问题
- 在struts开发中使用validator验证时应该注意的基本问题
- 一些在Hibernate学习中应该注意的问题
- [分享]美工跟程序员合作应该注意哪些问题(来自CSDN)