c++從入門到精通——深拷貝和淺拷貝

深拷貝和淺拷貝

同一類型的對象之間可以賦值,使得兩個對象的成員變量的值相同,兩個對象仍然是獨立的兩個對象,這種情況被稱爲淺拷貝
一般情況下,淺拷貝沒有任何副作用,但是當類中有指針,並且指針指向動態分配的內存空間,析構函數做了動態內存釋放的處理,會導致內存問題。

淺拷貝

在這裏插入圖片描述

也就是說淺拷貝p1對象的pName指針與p2對象的pName指針指向的地址相同
在這裏插入圖片描述

深拷貝

當類中有指針,並且此指針有動態分配空間,析構函數做了釋放處理,往往需要自定義拷貝構造函數,自行給指針動態分配空間,深拷貝。
在這裏插入圖片描述

也就是說深拷貝p1對象的pName指針與p2對象的pName指針指向的地址不相同在這裏插入圖片描述

class Person{
public:
	Person(char* name,int age){
		pName = (char*)malloc(strlen(name) + 1);
		strcpy(pName,name);
		mAge = age;
	}
	//增加拷貝構造函數
	Person(const Person& person){
		pName = (char*)malloc(strlen(person.pName) + 1);
		strcpy(pName, person.pName);
		mAge = person.mAge;
	}
	~Person(){
		if (pName != NULL){
			free(pName);
		}
	}
private:
	char* pName;
	int mAge;
};

void test(){
	Person p1("Edward",30);
	//用對象p1初始化對象p2,調用c++提供的默認拷貝構造函數
	Person p2 = p1;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章