C++中的位拷贝和值拷贝
来源:互联网 发布:热血霸业(神奇网络) 编辑:程序博客网 时间:2024/04/30 01:31
原帖:http://blog.csdn.net/liam1122/archive/2007/12/25/1966617.aspx
为了便于说明我们以String类为例:
首先定义String类,而并不实现其成员函数。
public:
String(const char *ch=NULL);//默认构造函数
String(const String &str);//拷贝构造函数
~String(void);
String &operator=(const String &str);//赋值函数
private:
char *m_data;
};
位拷贝拷贝的是地址,而值拷贝则拷贝的是内容。如果定义两个String对象A和B。A.m_data和B.m_data分别指向一段区域,A.m_data="windows",B.m_data=“linux";
如果未重写赋值函数,将B赋给A;则编译器会默认进行位拷贝,A.m_data=B.m_data
则A.m_data和B.m_data指向同一块区域,虽然A.m_data指向的内容会改变成"linux",但是这样容易出现这些问题:
(1):A.m_data原来指向的内存区域未释放,造成内存泄露。
(2):A.m_data和B.m_data指向同一块区域,任何一方改变都会影响另一方
(3):当对象被析构时,B.m_data被释放两次。
对于编译器,如果不主动编写拷贝函数和赋值函数,它会以“位拷贝”的方式自动生成缺省的函数。
如果重写赋值函数和拷贝构造函数后,
A.m_data=B.m_data,进行的是值拷贝,会将B.m_data的内容赋给A.m_data,A.m_data还是指向原来的内存区域,但是其内容改变。
- C++中的位拷贝和值拷贝
- C++中的位拷贝和值拷贝
- C++中的位拷贝和值拷贝
- C++中的位拷贝和值拷贝
- C++中的位拷贝和值拷贝
- C++中的位拷贝和值拷贝
- C++中的位拷贝和值拷贝
- C++中的位拷贝和值拷贝
- C++中的位拷贝和值拷贝
- C++中的位拷贝和值拷贝
- C++中的位拷贝和值拷贝
- C++中的位拷贝和值拷贝 .
- C++中的位拷贝和值拷贝
- C++中的位拷贝和值拷贝
- C++中的位拷贝和值拷贝
- C++中的位拷贝和值拷贝
- 位拷贝和值拷贝
- C++中的位拷贝和值拷贝(深拷贝和浅拷贝)
- 爱情的二十中面目
- 得到CPU信息和内存信息
- ie下调试javascript的工具
- 经典感悟,能改变你一生的五句话
- Windows 线程漫谈——界面线程和工作者线程
- C++中的位拷贝和值拷贝
- 数据库对象 字符串连接符||
- 有关Linux下的游戏
- 基于VFW的视频预览
- dbf转换到excel,改数据后---转txt 然后又foxpro导入为dbf格式,但是有点问题!
- GridView中点击一列无刷新弹窗口
- 进程通信方法
- 开心农场外挂破解中。。。
- 系统分析员基本功