什么是浅复制与深复制
来源:互联网 发布:桌面提醒软件 编辑:程序博客网 时间:2024/05/22 03:05
浅复制又称浅拷贝,指的是在对象复制时,只是对对象中的数据成员进行简单的赋值,默认复制构造函数执行的也是浅复制。浅复制实例代码如下:
#include <iostream>
using namespace std;
class Test
{
public:
Test(int temp)
{
p1 = temp;
}
Test(Test &c_t)
{
cout << "进入copy构造函数" << endl;
p1 = c_t.p1;
}
int p1;
protected:
private:
};
int main()
{
Test a(99);
Test b = a;
cout << b.p1 << endl;
system("pause");
return 0;
}
深复制又称深拷贝,对于对象中的动态成员,就不仅仅是简单的赋值了,而是重新动态分配空间。深复制的示例代码如下:
#include <iostream>
using namespace std;
class Rect
{
public:
Rect()//构造函数,p指向堆中分配的空间
{
p = new int(100);
}
Rect(const Rect& r)
{
width = r.width;
heigh = r.heigh;
p = new int;
*p = *(r.p);
}
~Rect()
{
if (p!=NULL)
{
if (p!=NULL)
{
delete p;
}
}
}
protected:
private:
int width;//宽
int heigh;//高
int *p;//指针成员
};
int main()
{
system("pause");
return 0;
}
上面代码中rect1的p和rect2的p各指向一段内存空间,但他们指向的空间具有相同的内容。
如果一个类拥有资源,当这个类的对象发生复制的过程,这个过程就可以叫做深复制,如果对象存在资源但在复制过程中并未复制资源就是浅复制。
#include <iostream>
using namespace std;
class Test
{
public:
Test(int temp)
{
p1 = temp;
}
Test(Test &c_t)
{
cout << "进入copy构造函数" << endl;
p1 = c_t.p1;
}
int p1;
protected:
private:
};
int main()
{
Test a(99);
Test b = a;
cout << b.p1 << endl;
system("pause");
return 0;
}
深复制又称深拷贝,对于对象中的动态成员,就不仅仅是简单的赋值了,而是重新动态分配空间。深复制的示例代码如下:
#include <iostream>
using namespace std;
class Rect
{
public:
Rect()//构造函数,p指向堆中分配的空间
{
p = new int(100);
}
Rect(const Rect& r)
{
width = r.width;
heigh = r.heigh;
p = new int;
*p = *(r.p);
}
~Rect()
{
if (p!=NULL)
{
if (p!=NULL)
{
delete p;
}
}
}
protected:
private:
int width;//宽
int heigh;//高
int *p;//指针成员
};
int main()
{
system("pause");
return 0;
}
上面代码中rect1的p和rect2的p各指向一段内存空间,但他们指向的空间具有相同的内容。
如果一个类拥有资源,当这个类的对象发生复制的过程,这个过程就可以叫做深复制,如果对象存在资源但在复制过程中并未复制资源就是浅复制。
0 0
- 什么是浅复制与深复制
- 浅复制与深复制
- 浅复制与深复制
- 深复制与浅复制
- 浅复制与深复制
- 深复制与浅复制
- 深复制与浅复制
- 浅复制与深复制
- 浅复制与深复制
- 浅复制与深复制
- 浅复制与深复制
- 深复制与浅复制
- 浅复制与深复制
- 深复制与浅复制
- 浅复制与深复制
- 深复制与浅复制
- 深复制与浅复制
- JAVA中浅复制与深复制
- Android SDK Samples,学习Android的好方法
- JSP标准标签
- 大型网站架构之路
- POJ 1077-Eight(BFS+优先队列)
- css文本换行
- 什么是浅复制与深复制
- 20来行的Python拼写检查器
- 用802.1X+FreeRadius+LDAP实现网络准入方案
- 浅谈 -webkit-tap-highlight-color 属性
- ubuntu如何访问windows共享文件夹
- JavaScript对象数组表格处理加案例
- C++使用oracle的occi库操作oracle数据库
- 斐波那契数列
- poj2184(负权01背包)