C++入门深拷贝和浅拷贝详解

Posted 正在起飞的蜗牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++入门深拷贝和浅拷贝详解相关的知识,希望对你有一定的参考价值。

1、深拷贝和浅拷贝

(1)当我们对复杂类型(结构体或者类)的对象进行初始化时,如果将同类型的对象A赋值给同类型的对象B,此时就涉及深拷贝和浅拷贝的问题;
(2)如何定义拷贝的深和浅:浅拷贝就是把类/结构体的变量原封不动的赋值,不考虑指针变量;深拷贝就是在赋值时会对指针变量做处理;
总结:对象拷贝时,对指针变量做处理的是深拷贝,不对指针变量做处理的是浅拷贝;

2、示例代码

class Person
public:
	 string *name;	//姓名,是一个指针变量
    int age;			//年龄
    int gender;		//性别:0表示男,1表示女
;

Person A;
A.name ="linux";
A.age=27;
A.gender = 1;

Person B = A;

3、浅拷贝的情况

浅拷贝就是把类的变量值原封不对的复制过去,指针变量和普通变量没有任何区别;浅拷贝的缺陷:
(1)当类的成员变量没有指针变量时,浅拷贝是没有问题的;
(2)如果类中存在指针变量,浅拷贝就会出现问题。比如上面B在拷贝A时,将A.name的值原封不对拷贝过来,导致B.name指向同一块内存,但是那块内存是A申请的,A在使用时不会考虑B,就可能存在A将内存释放掉但是B不知道,B仍然在使用那块内存,此时就会出错;

4、深拷贝的情况

(1)对指针变量做特殊处理,申请一块同样大小的内存,然后把A.name的内容拷贝过来;
总结:类的成员变量有指针变量时用深拷贝,其余情况用浅拷贝;

5、推荐

我会在C++专栏持续根据更新C++相关的知识点,这里也给大家推荐一款学习C++的神器,我也是在用这一款神器在学习C++。
链接:学习神器跳转
如果你是想入门C++这门语言或者是找C++岗位的工作,都推荐你试试这个网站,里面有针对C++知识点的选择题、编程题,更有C++岗位的面试题

以上是关于C++入门深拷贝和浅拷贝详解的主要内容,如果未能解决你的问题,请参考以下文章

详解常见面试题---深拷贝和浅拷贝(C++)

详解常见面试题---深拷贝和浅拷贝(C++)

C++入门拷贝构造函数详解

C++入门拷贝构造函数详解

c++中深拷贝和浅拷贝问题

**Python中的深拷贝和浅拷贝详解