C++中深拷贝与浅拷贝区别

来源:互联网 发布:第章启航网络 编辑:程序博客网 时间:2024/05/29 16:29

1.需要使用拷贝构造函数的情况

(1)当用类的一个对象去初始化该类的另一个对象时;

(2)如果函数的形参是类的对象,调用函数时,进行形参和实参结合时;

(3)如果函数的返回值是类的对象,函数执行完成返回调用者时。


2.深拷贝与浅拷贝区别

(1)浅拷贝

如果在类中没有显示地声明一个拷贝构造函数,那么,编译器将自动会生成一个默认的拷贝构造函数,该拷贝构造函数完成对象之间的位拷贝,位拷贝也称为浅拷贝。

(2)深拷贝

在某些状况下,类内成员变量需要动态开辟内存堆内存,如果实现浅拷贝,也就是把对象里的值完全复制给另一个对象,如obj2=obj1,这时,如果obj2中有一个成员变量指针已经申请了内存,那么obj1中那个成员变量也指向同一块内存,这就出现了问题,当obj2把内存释放了(如调用了析构函数),这时obj1内的指针就是野指针,出现了运行错误。简而言之,如果一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝,反之,没有重新分配资源,就是浅拷贝。

1 0
原创粉丝点击