深拷贝,浅拷贝
来源:互联网 发布:java 运行lua 编辑:程序博客网 时间:2024/05/16 06:32
参考链接:http://www.cnblogs.com/BlueTzar/articles/1223313.html
深拷贝和浅拷贝可以简单理解为:如果一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝,反之,没有重新分配资源,就是浅拷贝。
如普通类型对象的复制操作int a = 10;int b = a;就是浅拷贝。
而类对象就存在深拷贝和浅拷贝的问题,在说明深拷贝与浅拷贝之间的区别之前,有必要了解类对象复制的几种情况,如:
class Example{
private:
int a;
public:
Example(int b)
{
a = b;
}
}
int main()
{
class Example A(100);
class Example B;
B = A;
}
此时虽然B.a也是100,但是这是一种浅拷贝。系统是调用了拷贝构造函数。
拷贝构造函数是在以下三种情况会调用的函数
一个对象以值传递的方式传入函数体
一个对象以值传递的方式从函数返回
一个对象需要通过另外一个对象进行初始化。
一个对象以值传递的方式从函数返回
一个对象需要通过另外一个对象进行初始化。
形式如下:
Example(const Example &b)
{
a = b.c;
}
与普通构造函数一样,函数名必须与类名相同。但是参数是一个同类的常量对象的引用。
如果类中没有显示的声明一个拷贝构造函数,编译器会分配一个拷贝构造函数,执行对象之间的位拷贝,将对象里的值完全复制给另一个对象(包括指针)。但是这存在一个缺点,如果类内成员变量需要动态开辟堆内存,如:A=B,则A中变量和B中变量指向同一块内存,如果B被析构了,则A中的指针就指向空地址,导致错误。所以在需要做深拷贝时自定义拷贝构造函数是很必要的。
深拷贝和浅拷贝最明显的区别在于,如果一个类拥有资源,当这个类的对象发生复制过程的时候,需要重新分配,则是深拷贝,否则就是浅拷贝,编译器分配的构造函数式浅拷贝。
- 深拷贝&&浅拷贝
- 深拷贝||浅拷贝
- 浅拷贝,深拷贝
- 浅拷贝,深拷贝
- 深拷贝,浅拷贝
- 浅拷贝 深拷贝
- 浅拷贝.深拷贝
- 浅拷贝 深拷贝
- 深拷贝,浅拷贝
- 深拷贝、浅拷贝
- 深拷贝、浅拷贝
- 深拷贝+浅拷贝
- 深拷贝 浅拷贝
- 浅拷贝、深拷贝
- 浅拷贝、深拷贝
- 深拷贝、浅拷贝
- 深拷贝,浅拷贝
- 深拷贝、浅拷贝
- 使用VS2010调试技巧让C指针无处遁形
- Outlook Note
- responsive web design plugin collection
- win32,win64编程的区别
- 杭电 ACM 1.3.6
- 深拷贝,浅拷贝
- 一种大文件的排序方法
- perl glob 过滤文件列表
- C/C++中的日期和时间 time_t与struct tm变换
- POJ 2155 二维线段树(压位水过)
- SuspendLayout 和 ResumeLayout
- 详解C程序开发中 .c和.h文件的区别
- 栈和堆的区别
- MySql数据库 汉字 ? 乱码解决 详细步骤 问题已解决