C/C++教程

C++ 浅拷贝与深拷贝

本文主要是介绍C++ 浅拷贝与深拷贝,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

C++类中 会默认有一个拷贝函数 用于拷贝类的值 

 1 class Person {
 2 public:
 3     Person() {
 4         cout << "person的无参构造函数!" << endl;
 5     }
 6     Person(int age, int hight) {
 7         p_age = age;
 8         p_hight = new int(hight);
 9         cout << "person的有参构造函数!" << endl;
10     }
11     //默认拷贝函数的原理
12     Person(const Person & p) {
13         p_age = p.p_age;
14         p_hight = p.p_hight;
15         cout << "person的拷贝函数!" << endl;
16     }
17     ~Person() {
18         if (p_hight != NULL) {
19             delete p_hight;
20             p_hight = NULL;
21         }
22         cout << "person的析构函数!" << endl;
23     }
24     int p_age;
25     int* p_hight;
26 };

这就是浅拷贝,当我们需要释放内存的时候,由于两个类申明的变量都使用的同一个堆区内存,当其中一个释放之后,另一个变量也会执行释放,这时候就会报错

 

 所以我们需要将浅拷贝转换成深拷贝,就是在使用堆区内存时,重新开辟一块堆区内存,然后重新赋值

1 //深拷贝
2     Person(const Person & p) {
3         p_age = p.p_age;
4         p_hight = new int(*p.p_hight);
5         cout << "person的拷贝函数!" << endl;
6     }

这里需要注意的事因为p_hight是指针变量,而int() 内需要一个值,所以需要堆p_hight进行解引用

这篇关于C++ 浅拷贝与深拷贝的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!