C++基础(十)深拷贝与浅拷贝

 在利用编译器提供的默认拷贝构造函数时,默认的拷贝构造函数是浅拷贝

(浅拷贝)也就是说,当成员变量是存在于堆中的情况下,默认拷贝构造函数(浅拷贝)只复制引用。

这样的话,在析构函数中释放 (delete) 堆中的成员变量时就会出现问题

所以为了解决这一问题,将浅拷贝修改成深拷贝,即在拷贝的过程中相对的也在堆中开辟新的空间,此时再进行赋值,这样的拷贝就是深拷贝

这样在析构函数释放资源时就不会出现问题了。

#include <iostream>
using namespace std;

class Person 
{
public:
	//无参构造函数
	Person() 
	{
		cout << "Person 的无参构造函数"<< endl;
	}
	//有参构造函数
	Person(int age ,int height)
	{
		p_Age = age;
		p_Height = new int(height);
		cout << "Person 的有参构造函数" << endl;
	}
	//拷贝构造函数
	Person(Person *p) 
	{
		p_Age = p->p_Age;
		p_Height = new int(*(p->p_Height));
		cout << "Person 的拷贝构造函数" << endl;
	}
	int getHeight() 
	{
		return *p_Height;
	}
	~Person() 
	{
		if (p_Height != NULL) 
		{
			delete p_Height;
			p_Height = NULL;
		}
		cout << "Person 的析构函数" << endl;
	}
private:
	int p_Age;
	int* p_Height;
};

void run() 
{
	Person p(18, 180);
	Person p2(&p);
	cout << "p2的身高是:" << p2.getHeight() << endl;
}

int main() 
{
	run();
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/we1less/article/details/108810451
今日推荐