说说C++下深拷贝和浅拷贝
C++ #深拷贝 #浅拷贝2012-11-12 15:56
需要将一个对象赋给另一个对象,其中就有一些值得注意的点。
浅拷贝:
在没有进行运算符的重载时,一般情况下我们定义一个A a(1,2,3);A b;这两个对象,我们会有 b = a; 这就是对象之间的拷贝,也就是会出现深拷贝和浅拷贝,以及一些错误。首先,b = a是一个浅拷贝过程就是将一些数值进行赋值操作。这就出现一个问题,如果类中含有指针,浅拷贝就会出现问题。
当a对象析构时,则其指针所指向的空间也就释放,此时b对象中的数据中的指针指向了已经释放了的空间,这样的指针是不合法的,会对其他程序的数据产生破坏。为了防止这类事情的发生,我们就采用运算符重载,来实现对象之间的深拷贝。。理解了这一点,我们就知道,需要同时为a,b两个对象分配同样大小的内存空间,将所需要的数据全部拷贝到自己的空间。对象的数据中的指针指向自己数据空间肯定是合法的。
至于运算符的重载,这个很好理解,就不一一解释了。
相关文章
- C/C++数组名与指针区别 2012/11/12
- C++拷贝构造函数和赋值构造函数 2012/11/12
- 预处理指令#pragma详细解释 2012/11/12
- 如何自己编写Makefile 2012/11/12
- Google C++编程风格指南(八):规则之例外 2012/11/09
- Google C++编程风格指南(七):格式 2012/11/09
- Google C++编程风格指南(六):代码注释 2012/11/09
- Google C++编程风格指南(五):命名约定 2012/11/09
- Google C++编程风格指南(四):智能指针和其他C++特性 2012/11/09
- Google C++编程风格指南(三):C++ 类 2012/11/09