1 #include <cstring>
2 #include <iostream> // 标准的输入输出
3 using namespace std;
4
5 class Person {
6 public:
7 Person()
8 {
9 }
10 Person(char const* name, int age)
11 {
12 ¦ m_Name = (char*)malloc(strlen(name) + 1);
13 ¦ strcpy(m_Name, name);
14 ¦ m_age = age;
15 }
16
17 // 姓名
18 char* m_Name;
19 // 年龄
20 int m_age;
21
22 // 拷贝构造,系统会提供默认的拷贝构造,而且是简单的值拷贝
23 // 自己提供拷贝函数,原因是简单的浅拷贝会释放堆区两次,导致程序崩掉
24 // 深拷贝
25 Person(const Person& p)
26 {
27 ¦ m_age = p.m_age;
28 ¦ m_Name = (char*)malloc(strlen(p.m_Name) + 1);
29 ¦ strcpy(m_Name, p.m_Name);
30 }
31
32 ~Person()
33 {
34 ¦ cout << "调用析构函数" << endl;
35 ¦ // 释放堆区
36 ¦ if (m_Name != NULL) {
37 ¦ ¦ free(m_Name);
38 ¦ ¦ m_Name = NULL;
39 ¦ }
40 }
41 };
42
43 void test1()
44 {
45 Person p1("张三", 15);
46
47 Person p2(p1); // 调用拷贝构造函数
48 }
49 int main()
50 {
51 test1();
52 return 0;
53 }
c++ 深拷浅拷贝学习代码
最新推荐文章于 2023-06-09 20:55:08 发布