a.浅拷贝(Shallow Copy):只复制对象的基本类型,对象类型,仍属于原来的引用。
b.深拷贝(Deep Copy):不仅复制对象的基本类,同时也复制原对象中的对象.完全产生新对象。
也就是说,shallow copy 只会拷贝原值,对于指针指向的内存空间,也仅仅拷贝其地址。而deep copy不仅拷贝原值,对于指针指向的内存空间,也做嵌套复制。
The default copy constructor and assignment operator make shallow copies. To make a deep copy, you must write a copy constructor and overload the assignment operator.
例题:
下面C++代码会出现什么情况, 详细说明
class A {
public:
class B * p; // 不用管B怎么定义的,假设已定义好
~A() {delete p;}
};
void fun() {
A x, y;
x.p = new B();
y = x;
}
void main() {
fun();
}分析:
y = x 只会把 x.p的地址值赋值给y.p,也就是说y.p 也指向 new B()所开辟的空间。
当fun()运行完,会析构x,y对象,总共调用~A()两次,其中一个会删除new B()所开辟的空间,导致另外的一个p指针成为wild pointer。
解决方案:
~A() { if(p) {delete p;p=NULL;}}
最好overload copy constructor and operator =
本文详细解释了浅拷贝和深拷贝的概念,并通过C++代码示例展示了它们在实际应用中的区别。重点讨论了如何避免在使用浅拷贝时可能导致的野指针问题。
2536

被折叠的 条评论
为什么被折叠?



