赋值操作符概要
来源:互联网 发布:沈阳居住证网络查询 编辑:程序博客网 时间:2024/05/16 18:04
一个类默认有一个赋值函数,类似这样的:
classtype& operator = (const classtype&);
这个赋值函数也就是一个简单的= 操作符的重载形式,当你要将一个对象赋值给另一个对象时调用
有关赋值函数,有以下概要问题:
(以string类为例)
class string{public:string& operator = (const string& s);private:char *data;};
1.错误的定义形式
string& operator = (const string& s){delete [ ] data;data = new char[strlen(s.data)+1];strcpy(data,s.data);return *this;}
因为没有处理自己本身赋值给自己的情况,在这种情况下,this 和 s 指向同一对象,程序运行会down掉。
2,正确的定义形式
string& operator = (const string& s){if(this != &s){delete [ ] data;data = new char[strlen(s.data)+1];strcpy(data,s.data);}return *this;}
在这里只要加上if判断是否是自己赋值给自己就ok了,如果是自己赋值给自己,就简单的返回this.
3,正确的定义形式
string& operator = (const string& s){ char *newdata=new char[strlen(s.data)+1];strcpy(newdata,s.data);delete [ ] data;data = newdata;return *this;}
这个方法就是利用中间变量将旧的目标值保存起来,知道赋值操作完成为止。
如果你的程序没有必要用到这个赋值函数,直接将其声明为私有即可
private:string& operator = (const string &);
#define DISALLOW_ASSIGN(type) private: \type& operator = (const type&);
class string
{
public :
//some functions
DISALLOW_ASSIGN(string);
};
0 0
- 赋值操作符概要
- C++ 赋值操作符
- 赋值操作符
- 赋值操作符
- C++赋值操作符
- 赋值操作符
- 赋值操作符
- awk赋值操作符
- Java赋值操作符
- 赋值操作符
- 赋值操作符
- c++ 赋值操作符
- 赋值 和复合赋值操作符
- C++之赋值操作符
- 谜题1.2 赋值操作符
- c++ 重载赋值操作符
- C++重载赋值操作符
- c++默认赋值操作符
- 顺序图知识点
- FF,ie6,ie7兼容性
- PHP 脚本执行内存使用大小
- jEasyUI 中文版
- java高新技术之使用反射和内省对对象的操作
- 赋值操作符概要
- API Hook基本原理和实现
- C++中星号(*)和与号(&)的用法
- 研大考研不是骗子,五一试学感悟
- 8080 和 6800 接口的区别
- C# download file from webserver
- 获得指向关键ios目录的引用
- OCP 1Z0 051 QUESTION NO: 55
- 汉诺塔问题