浅拷贝带来的问题
如果有属性是在堆区开辟的,而且使用的是编译器默认提供的拷贝构造函数(浅拷贝),因为浅拷贝是将p1完完整整的拷贝一份给p2(包括新建堆区的内存空间),所以会在实现通过析构函数释放堆区空间时导致重复释放的操作,会报错,导致程序无法运行。错误案例如下:
#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() {
cout << "析构函数!" << endl;
if (m_height != NULL)