C++___深淺拷貝
阿新 • • 發佈:2020-12-27
淺拷貝
同一型別的物件之間可以賦值,使得兩個物件的成員變數的值相同,兩個物件仍然是獨立的兩個物件,這種情況被稱為淺拷貝.
一般情況下,淺拷貝沒有任何副作用,但是當類中有指標,並且指標指向動態分配的記憶體空間,解構函式做了動態記憶體釋放的處理,會導致記憶體問題。
深拷貝
當類中有指標,並且此指標有動態分配空間,解構函式做了釋放處理,往往需要自定義拷貝建構函式,自行給指標動態分配空間,深拷貝。
//例子
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;
}