浅拷贝:简单的赋值拷贝操作
深拷贝:在堆区重新申请空间,进行拷贝操作
(析构函数的作用一般将堆区开辟的数据做释放操作)
如果利用编译器提供的拷贝构造函数,会做浅拷贝操作,有可能会带来堆区的内容重复释放的问题。解决问题的方法是用户覆写拷贝构造函数,重新开辟一个内存空间来存放数据
Person (const Person &p ){
cout <<“拷贝构造函数的调用”<<endl;
m_age = p.m_Age;
// m_Height = p.m_Height; //编译器自动实现的是这行代码, 实现浅拷贝的操作
m_Height = new int (*p.m_Height);
}
重点总结:如果一个类中属性有在堆区的开辟的,那么一定要自己提供拷贝构造函数,并且实现对指针变量的重新堆区开辟,才能在main()中使用时进行类的成员拷贝,防止浅拷贝带来的问题