菜鸟笔记
提升您的技术认知

c 中的深拷贝与浅拷贝-ag真人游戏

深拷贝与浅拷贝

深浅拷贝是面试经典问题,也是常见的一个坑

浅拷贝:简单的赋值拷贝操作

深拷贝:在堆区重新申请空间,进行拷贝操作

示例:

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;
}


总结:如果属性有在堆区开辟的,一定要自己提供拷贝构造函数,防止浅拷贝带来的问题

网站地图