1. 程式人生 > >C++——深拷貝、淺拷貝

C++——深拷貝、淺拷貝

#include <iostream>
using namespace std;

class CExample {
private:
     int a;
public:
     CExample(int b)
     { a=b;}
     void Show ()
     {
        cout<<a<<endl;
    }
};

int main()
{
     CExample A(100);
     CExample B=A;
     B.Show ();//輸出100,系統為物件B分配了記憶體並完成了與物件A的複製過程。
     return
0; }

就類物件而言,相同型別的類物件是通過拷貝建構函式來完成整個複製過程的:

#include <iostream>
using namespace std;

class CExample {
private:
    int a;
public:
    CExample(int b)
    { a=b;}

    CExample(const CExample& C)//拷貝建構函式
    {//當類的物件需要拷貝時,拷貝建構函式將會被呼叫
        a=C.a;
    }
    void Show ()
    {
        cout<<a<<endl;
    }
};

int
main() { CExample A(100); CExample B=A; B.Show (); return 0; }

如果在類中沒有顯式地宣告一個拷貝建構函式,那麼,編譯器將會自動生成一個預設的拷貝建構函式,該建構函式完成物件之間的位拷貝。位拷貝又稱淺拷貝(也就是把物件裡的值完全複製給另一個物件,如A=B。這時,如果B中有一個成員變數指標已經申請了記憶體,那A中的那個成員變數也指向同一塊記憶體)。
深拷貝和淺拷貝可以簡單理解為:如果一個類擁有資源,當這個類的物件發生複製過程的時候,資源重新分配,這個過程就是深拷貝,反之,沒有重新分配資源,就是淺拷貝。