什么时候会调用拷贝函数
当对象之间赋值操作时
class A{ //无自定义拷贝函数
private:
int x;
public:
A(int y){
x=y;
}
}
A a(100);
A b=a;
什么是浅拷贝
浅拷贝又称位拷贝,如果未自定义拷贝,系统会默认创建一个拷贝函数,为浅拷贝。
浅拷贝:如果对象a有一个指针ptr0,指向一块内存X,对象b则会使用一个指针ptr1,也指向内存X,不会重新创建一块新的内存。当对象a的ptr0被释放,内存X也被释放,b的ptr1就变成了野指针
class A{
private:
int x;
public:
A(int y){
x=y;
}
A(const A &c){//自定义拷贝函数
x=c.x;
}
}
什么是深拷贝
深拷贝和浅拷贝相对应
对象b在创建一个新的指针的时候。也会创建一块的新的内存
class A{
private:
int x;
char *s;
public:
A(int y){
x=y;
}
A(const A &c){//自定义拷贝函数
x=c.x;
s=new char[x];//深拷贝
if(s!=nullptr)
strcpy(s,c.s);
}
~A(){
delete s;
}
}