深拷贝与浅拷贝
如果内存在堆区,浅拷贝会造成内存空间的重复释放
使用深拷贝可以解决浅拷贝带来的问题,创建拷贝构造函数,避免内存重复释放
析构函数也可以发挥作用,检查内存是否是放干净,释放堆区
析构函数
~person() {
//检查指针是否为空,即堆区是否为空
//不为空认为置空
if (m_height!=NULL) {
delete m_height;
m_height = NULL;
}
}
如果类的内部有栈区数据,需要加拷贝构造函数
person(const person&p){
m_age=p.age;
m_height=new int(*p.m_height);
}
person类里面本身定义了两个属性分别为 int m_age
和指针int *m_height
有参构造
person(int age,int height){
m_age=age;
m_height=new int(height);
}
含有指针参数的类定义有参构造函数,会在堆上开辟空间,在建新类的时候会导致堆区空间重复释放,因而使用深拷贝弥补浅拷贝带来的问题