C++中重载赋值运算符应该注意的地方
来源:互联网 发布:学淘宝推广 编辑:程序博客网 时间:2024/06/05 07:31
C++中自定义的类一般都会重载赋值运算函数,重载时候应该注意一下几点:
1. 返回类型
- 必须为该类型的引用
- 原因:必须返回一个引用,才可以允许连续赋值 ;
- 必须返回自身实例的引用(*this)
2. 参数
- 传入参数申明为常量引用
- 如果传入的参数不是引用而是实例,那么从形参到实参会调用一次复制构造函数;
- 传入参数和当前的实例(*this)是否为同一实例.
3. 释放实例自身已有的类型,防止内存泄露;
4. 考虑当因内存不足在new char时候抛出异常
4. 考虑当因内存不足在new char时候抛出异常
以string为例,以下为两个版本的重载赋值运算符的代码:
Reference
string& string::operator=(const string& str){ if( this==&str ) return *this; delete []data; m_data = null; m_data = new char[ strlen(str.data)+1] ; strcpy(data, str.data); return *this;}
delete后防止因空间不足导致new char失败导致的异常;
string& string::operator=(const string& str){ if( this != &str){ string temp(str); char *p = temp.data; temp.data = data; data = p; } return *this;}
Reference
《effective c++》 item 5 -- 12
0 0
- C++中重载赋值运算符应该注意的地方
- 重载及运算符重载需要注意的地方
- C 中运算注意的地方
- C 应该注意的地方
- 调用重载操作符operator []时应该注意的地方
- C++运算符重载需要注意的地方
- C++运算符重载需要注意的地方
- C++中赋值运算符的重载
- C++:赋值运算符重载
- C语句应该注意的地方
- Java覆盖中应该注意的地方
- 赋值运算符的重载
- 重载赋值运算符(c/c++)
- Java中三元运算符值得注意的地方
- 重载赋值运算符(c++)
- C++ Exceptional 重载运算符new和delete时要注意的地方
- 类中重载赋值运算符
- c++中赋值运算符重载
- 大师是怎样炼成的
- TypeError: e[h] is not a function
- java代理模式与反射机制
- 进一步优化Android ListView GridView中异步加载图片
- 最重要的一年——对自己的要求
- C++中重载赋值运算符应该注意的地方
- MySQL基础知识---------ANALYZE TABLE语法/SHOW CREATE TABLE语法
- eclipse运行android程序,总是启动一个新的AVD模拟器,解决办法
- 黑马程序员学习笔记——Runtime类
- 小米手机-米1 wifi密码输入正确但还是被提示密码错误
- technical knowledge
- leetcode Edit Distanc (DP)
- Oracle10g数据文件的收缩与数据对象跨表空间的迁移
- 关于HTML5、Jquery、Phonegap跨域问题的研究