类和对象-对象特征-深拷贝与浅拷贝

今天主播来讲一下深浅拷贝,是面试的一个坑

(1)浅拷贝-简单的赋值拷贝操作

#include<bits/stdc++.h>
using namespace std;
class person{
	public:
		person(int age,int height){
			m_age=age;
			m_height=new int(height);
		}
		
		~person(){
			if(m_height!=NULL){
				delete m_height;
				m_height=NULL;
			}
		}
		int m_age;
		int *m_height;
};
void test01(){
	person p1(18,160);
	person p2(p1);
	cout<<p1.m_age<<" "<<*p1.m_height<<endl;
	cout<<p2.m_age<<" "<<*p2.m_height<<endl;
}
int main()
{
	test01();
}

p1和p2同时指向堆区,在函数执行结束之后执行析构函数的释放堆区内存,p1和p2连续释放两次导致代码错误

(2)深拷贝-在堆区重新申请空间,进行拷贝操作

自己实现拷贝构造函数,解决浅拷贝带来的问题

#include<bits/stdc++.h>
using namespace std;
class person{
	public:
		person(int age,int height){
			m_age=age;
			m_height=new int(height);
		}
		person(const person &p){
			m_age=p.m_age;
			m_height=new int(*p.m_height);
		}
		~person(){
			if(m_height!=NULL){
				delete m_height;
				m_height=NULL;
			}
		}
		int m_age;
		int *m_height;
};
void test01(){
	person p1(18,160);
	person p2(p1);
	cout<<p1.m_age<<" "<<*p1.m_height<<endl;
	cout<<p2.m_age<<" "<<*p2.m_height<<endl;
}
int main()
{
	test01();
}

自己在拷贝函数中重新申请堆内存,实现深拷贝

全部评论

相关推荐

04-19 11:59
门头沟学院 Java
卷不动辣24314:挂,看来不该投这个部门的
点赞 评论 收藏
分享
谁知道呢_:要掉小珍珠了,库库学三年,这个结果
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务