1. 程式人生 > 實用技巧 >c++深拷貝和淺拷貝

c++深拷貝和淺拷貝

預設複製建構函式可以完成物件的資料成員值簡單的複製
 物件的資料資源是由指標指示的堆時,預設複製建構函式僅作指標值複製
1淺拷貝問題丟擲和分析
深拷貝淺拷貝現象出現的原因
2淺拷貝程式C++提供的解決方法
顯示提供copy建構函式
顯示操作過載=號操作,不使用編譯器提供的淺copy

class Name
{
public:
Name(const char *pname)
{
size = strlen(pname);
pName = (char *)malloc(size + 1);
strcpy(pName, pname);
}
Name(Name &obj)
{
//用obj來初始化自己

pName = (char *)malloc(obj.size + 1);
strcpy(pName, obj.pName);
size = obj.size;
}
~Name()
{
cout<<“開始析構”<<endl;
if (pName!=NULL)
{
free(pName);
pName = NULL;
size = 0;
}
}
void operator=(Name &obj3)
{
if (pName != NULL)
{
free(pName);
pName = NULL;
size = 0;
}
cout<<“測試有沒有呼叫我。。。。”<<endl;
//用obj3來=自己
pName = (char *)malloc(obj3.size + 1);
strcpy(pName, obj3.pName);
size = obj3.size;
}
protected:
private:
char *pName;
int size;
};

//物件的初始化 和 物件之間=號操作是兩個不同的概念
void playObj()
{
Name obj1(“obj1…”);
Name obj2 = obj1; //obj2建立並初始化
Name obj3(“obj3…”);
//過載=號操作符
obj2 = obj3; //=號操作
cout<<“業務操作。。。5000”<<endl;

}
void main61()
{
playObj();
system(“pause”);
}
在這裡插入圖片描述
在這裡插入圖片描述