赋值运算符函数
来源:互联网 发布:java遍历json 编辑:程序博客网 时间:2024/06/10 01:05
注意点
返回值类型为该类型的引用,并且在函数结束时返回实例自身的引用(*this)
只有返回一个引用才允许连续赋值(链式访问)
参数的类型声明为常量引用
1.如果传入的参数不是引用而是实例,那么从形参到实参会调用拷贝构造函数,降低代码效率。(传引用不需调用拷贝构造函数)
2.在函数体内不会改变传入的实例(引用前加const)释放实例自身已有的内存(防止内存泄漏)
判断传入参数与当前实例是否为同一个实例
当传入的参数与*this是同一个实例,一旦释放自身的内存,参数的内存将一同释放,将找不到需要赋值的内容
class Mystring{public: Mystring() :p_data(0) {} Mystring(const Mystring& str) { p_data = str.p_data; } Mystring& operator = (const Mystring & s); ~Mystring(void) { if (NULL == p_data) { delete[] p_data; p_data = NULL; } }private: char* p_data;};
LOW
Mystring& Mystring::operator = (const Mystring & s){ if (this == &s)//判断参数和当前实例是不是相同 return *this; delete[] p_data;//释放实例 p_data = NULL;//置空 p_data = new char[strlen(s.p_data) + 1];//重新开辟空间 strcpy(p_data,s.p_data);//将参数数据拷贝到当前实例数据 return *this;}
GOOD
Mystring& Mystring::operator = (const Mystring & s){ if (this != &s)//判断参数和当前实例是不是相同 { Mystring pTmp(s);创建一个临时实例 char *tmp = pTmp.p_data; pTmp.p_data = p_data; p_data = tmp; } return *this;}//临时变量除了作用域将自动调用析构函数进内存释放
0 0
- 赋值运算符函数
- 赋值运算符函数
- 赋值运算符函数
- 赋值运算符函数
- 赋值运算符函数
- 赋值运算符函数
- 赋值运算符函数
- 赋值运算符函数
- 赋值运算符函数
- 赋值运算符函数
- 赋值运算符函数
- 赋值运算符函数
- 赋值运算符重载函数
- 关于赋值运算符函数
- 赋值运算符重载函数
- T1赋值运算符函数
- 4.赋值运算符函数
- 【C++】赋值运算符函数
- 有效括号
- Java多线程系列--“基础篇”03之 Thread中start()和run()的区别
- app语音聊天方案
- 关于游戏制作过程中遇到的几个问题记录
- Activity启动流程(源码分析)
- 赋值运算符函数
- 关于我
- HTML+CSS基础入门-第四天(HTML-图片标记)
- java程序设计测试题
- C++函数重定义、重载、重写
- 牛客网[编程题] DNA合成(Java实现)
- 初学Linux
- 通过订单及售后流程的不同分析思路,看产品与研发思维的区别
- 性能调优之:缓存