一、浅拷贝:
1.什么是浅拷贝?浅拷贝即拷贝函数仅简单地实现拷贝了原对象里的成员数值。
例子:
class A{
public:
A(int x){this->x = x;}
~A(){}
A(const A&a){
this->x = a.x;
}
void show(){
cout << "this->x=" << this->x << endl;
}
int x;
};
int main(){
A a(3);
A b = a; //调用拷贝构造函数,进行简单的值拷贝即浅拷
a.show();
b.show()
//若使用堆实例化对象:
A *c = new A(4);
A *d = new A(*c);
c->show();
d->show();
return 0;
}
二、深拷贝:
2.什么是深拷贝?深拷贝不仅简单地对值进行拷贝,并且对堆中内存的数值也进行了拷贝。
当类中有使用动态内存分配的指针变量时,深拷贝是很有必要性的,因为当你清空该指针变量所指空间时,会导致原对象指针所指空间也清除,则会使该指针指向不明处造成意外。
class A{
public:
A(int yourx)
{
myx = yourx;
x = new int[myx];
for(int i = 0; i < myx; i++)
{
x[i] = i;
}
}
~A(){delete []x; x = NULL;}
A(const A&a){
this->myx = a.myx;
x = new int[myx];
for(int i = 0; i < myx; i++)
{
this->x[i] = a.x[i];
}
}
void show()
{
for(int i = 0; i < myx; i++)
{
cout << this->x[i] <<" ";
}
}
int *x;
int myx;
};
int main(){
A a(3);
a.show();
A b(a);
b.show();
//打印结果 0 1 2 0 1 2
return 0;
}