C++的浅拷贝和深拷贝

Posted 慕書

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++的浅拷贝和深拷贝相关的知识,希望对你有一定的参考价值。

C++的浅拷贝和深拷贝

浅拷贝

简单的说,就是在拷贝的时候共用一块堆内存,在执行析构函数的时候,释放两次,就是把堆内存释放两次,出现错误。

深拷贝

把拷贝的内容重新的分配内存,拷贝的时候分配一个堆内存,析构函数释放两次就不会出错。


```cpp
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
class Person

public:

	Person()
	
	//初始化属性
	Person(char * name, int age)
	
		myname = (char*)malloc(strlen(name) + 1);
		strcpy(myname, name);

		myage = age;
	
	//拷贝构造 系统会提供默认拷贝构造,而且是简单的值拷贝
	//自己提供拷贝构造,原因简单的浅拷贝会释放堆区空间两次,导致出错
	//深拷贝
	Person(const Person&p)
	
		myage = p.myage;
		myname = (char*)malloc(strlen(p.myname) + 1);
		strcpy(myname, p.myname);
	

	~Person()
	
		cout << "析构函数调用" << endl;
		if (myname != NULL)
		
			free(myname);
			myname = NULL;
		
	

	//我的姓名
	char * myname;
	//我的年龄
	int myage;
;


void test01()

	Person p1("chenxuhu", 10);
	//Person p2(p1); //调用拷贝构造
	Person  p2 = p1;//调用拷贝构造




int main()

	test01();

	system("pause");
	return EXIT_SUCCESS;


以上是关于C++的浅拷贝和深拷贝的主要内容,如果未能解决你的问题,请参考以下文章

python的浅拷贝和深拷贝

js 对象的浅拷贝和深拷贝

Javascript中的浅拷贝和深拷贝

浅析java的浅拷贝和深拷贝

python中的浅拷贝和深拷贝

Python入门-6面向对象编程:11对象的浅拷贝和深拷贝