[c++]深拷貝和淺拷貝

#include <iostream>
//在有指針的情況下,淺拷貝只是增加了一個指針指向已經存在的內存,而深拷貝就是增加一個指針並且申請一個新的內存,使這個增加的指針指向這個新的內存,
//採用深拷貝的情況下,釋放內存的時候就不會出現在淺拷貝時重複釋放同一內存的錯誤

//?默認複製構造函數可以完成對象的數據成員值簡單的複製
//?對象的數據資源是由指針指示的堆時,默認複製構造函數僅作指針值複製
//
//淺拷貝程序C++提供的解決方法
//顯示提供copy構造函數
//顯示操作重載=號操作,不使用編譯器提供的淺copy
using namespace std;
class test{
public:
test(const char *pName){
size = strlen(pName);
this->pName = (char *)malloc(size+1);
strcpy(this->pName, pName);
}
test(test &obj){
pName = (char *)malloc(obj.size+1);
strcpy(this->pName, obj.pName);
size = obj.size;
}
//析構函數
~test(){
if(pName != NULL){
cout << "我是析構函數..." << endl;
free(pName);
pName = NULL; //避免野指針
size = 0;
getchar(); //測試析構函數
}
}
//深拷貝
void operator=(test &obj){
if(pName != NULL){
free(pName);
pName = NULL;
size = 0;
}

pName = (char *)malloc(obj.size + 1);
strcpy(pName, obj.pName);
size = obj.size;
}
private:
char *pName;
int size;
};

int main()
{
////對象的初始化和對象之間=號操作是兩個不同的概念
test t1("t1"); 
test t2 = t1; //創建並初始化
test t3("t3");

t2 = t3; //重載=  //加上斷點 可測試
getchar();
return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章