您的位置:首页 > 其它

位拷贝、值拷贝、浅拷贝、深拷贝

2016-08-10 15:35 225 查看
位拷贝拷贝的是地址(也叫浅拷贝),而值拷贝则拷贝的是内容(也叫深拷贝)。

如果不主动编写拷贝构造函数和赋值函数,编译器将以“位拷贝”的方式自动生成缺省的函数

现将 a赋给 b,缺省赋值函数的“位拷贝”意味着执行 b.m_data = a.m_data。这将造成三个错误:

一是 b.m_data 原有的内存没被释放,造成内存泄露;

二是b.m_data 和 a.m_data 指向同一块内存,a 或 b 任何一方变动都会影响另一方;

三是在对象被析构时,m_data被释放了两次。 

深拷贝:先申请内存,然后把值拷贝过来。

String::String(const String &other) 

{

 int length = strlen(other.m_data);  

 m_data = new char[length+1]; 

 strcpy(m_data, other.m_data); 

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: