深拷贝与浅拷贝
/*浅拷贝:简单的赋值操作深拷贝:在堆区重新申请空间,进行拷贝操作*/#include<iostream>using namespace std;class Person{public:Person() {cout << "无参构造函数" << endl;}Person(int age, int height) {cout << "有参构造函数" << endl;m_age = age;m_height = new int(height);}Person(const Person&p) {cout << "拷贝构造函数!" << endl;//如果不利用深拷贝在堆区创建新内存,会导致浅拷贝带来的重复释放堆区问题m_age = p.m_age;m_height = new int(*p.m_height); //深拷贝操作}~Person() {cout << "析构函数" << endl;if (m_height != NULL){delete m_height;}}public:int m_age;int * m_height;};void test01(){Person p1(18, 180);Person p2(p1);cout << "p1的年龄:" << p1.m_age << "身高:" << *p1.m_height << endl;cout << "p2的年龄:" << p2.m_age << "身高:" << *p2.m_height << endl;}int main() {test01();system("pause");return 0;}
- 栈执行顺序——>先进后出
- 利用默认拷贝构造函数时,做浅拷贝操作
- p2执行析构后,释放堆区数据
- p1再次执行析构时,重复释放内存
加号运算符重载
赋值运算符重载
添加析构函数后,堆区内存重复释放

