陷阱重重的C++赋值重载函数operator=
来源:互联网 发布:淘宝主图视频手机拍摄 编辑:程序博客网 时间:2024/06/05 08:23
曾经有C++高手说过:看一个C++程序员功底是否够硬,让他写个赋值重载函数就能看出来了!在我看来,这种说法并不夸张。因为能将operator=函数写好确实需要扎实的基础,其中的陷阱真不少。
- 陷阱一:不懂规避自我拷贝
先看代码
此代码就是没有规避自我赋值,那么如果进行以下的调用,那么后果很严重。
赋值操作中,会先把自己的数据delete掉,然后再strcpy一个空值,程序立马挂了。
所以,在赋值函数开始的时候,需要防止自我复制。写法如下:
但有些书籍上面使用以下写法,不敢苟同。- 陷阱二:返回值的类型用啥
在初学者的群体当中,有出现诸如以下几种返回值版本:
或或
版本一的缺陷:多了一个临时对象的生成和拷贝,影响程序效率。
版本二的缺陷:非const类型的变量想得到它的连续赋值变得不可能,而且编译器也会报错。
版本三的缺陷:不能保持连续赋值时类型的统一性,违反了编程的惯例。如
- 陷阱三:未做深拷贝
任何未做深拷贝的版本都退化为默认版本。
阅读全文
0 0
- 陷阱重重的C++赋值重载函数operator=
- 陷阱重重的C++赋值重载函数operator=
- C++在重载operator=为带模板的函数的时候的陷阱
- 重载赋值操作operator=()
- 一文说尽C++赋值运算符重载函数(operator=)
- 一文说尽C++赋值运算符重载函数(operator=)
- 一文说尽C++赋值运算符重载函数(operator=)
- 深入分析C++赋值运算符重载函数(operator=)
- 一文说尽C++赋值运算符重载函数(operator=)
- C++(7) 函数重载/operator
- C++ 重载赋值操作符operator=的高级议题
- C++库研究笔记——赋值操作符operator=的正确重载方式(三个准则)
- C++库研究笔记——赋值操作符operator=的正确重载方式(2)
- 重载set的operator<()函数
- 奇怪的C++operator重载
- 跨越数据类型的重重陷阱
- (未完成)C++ 重载赋值运算函数 operator =
- 运算符重载 编程题#3(专项课程3;重载:* operator, & operator=, & operator(); 函数 memcpy 的使用)
- AngularJS 控制器
- python 字典
- 2017年最好的JavaScript库
- 浅谈OPC协议-工业控制和自动化领域的接口标准
- 【Java集合源码剖析】LinkedHashmap源码剖析
- 陷阱重重的C++赋值重载函数operator=
- shell-grep中的正则表达式
- linux中安装svn
- ACM刷题之hdu————KazaQ's Socks
- 计网复习2
- 正则表达式系列总结
- Python中的编码与格式转换
- tensorflow1.1/人脸识别Yale数据集
- easyui----DataGrid DetailView(数据表格详细展示)