1 #include<iostream>
2 #include<string>
3 using namespace std;
4 //构造函数(拷贝构造函数),析构函数,
5 /*深拷贝:是指编译器给类提供定默认拷贝构造函数拷贝含有指针成员对象时,
6 调用默认析构函数多次释放堆中同一块内存,导致内存访问异常。
7
8 解决办法:自定义拷贝构造函数,针对指针成员,
9 用new关键字开辟另一块堆内存,存放拷贝对象的指针成员。
10 */
11 class Student
12 {
13 public:
14
15 Student() {}
16 //默认拷贝构造函数
17 /*
18 Student( Student &stu)
19 {
20 m_age = stu.m_age;
21 p = stu.p;
22 }
23 */
24
25 //自定义拷贝构造函数
26 Student(const Student &stu)
27 {
28 m_age = stu.m_age;
29 p = new int(*stu.p);
30 }
31
32 void showStudent()
33 {
34 cout << m_age << endl;;
35 cout << *p << endl;
36 cout << "" << endl;
37 }
38 //private:
39 int m_age;
40 int *p;
41
42 };
43
44 int main()
45 {
46 int a = 6;
47 //Student s1(10,&a) 错误操作,自定义析构函数之后,编译器不再提供默认普通构造函数来初始化;
48 Student s1;
49 s1.m_age = 10;
50 s1.p = &a;
51
52 Student s2=s1;
53 s1.showStudent();
54 s2.showStudent();
55
56 system("pause");
57 return 0;
5//构造函数