10.0 C++遠征:深拷貝與淺拷貝

3-1深拷貝與淺拷貝

1.淺拷貝

class Array{
public:
    Array(){
        m_iCount = 5;
    }
    Array(const Array& arr){    // 拷貝構造函數
        m_iCount = arr.m_iCount;
    }
private:
    int m_iCount;
}

int main(){
    Array arr1;
    Array arr2 = arr1;  // 淺拷貝
    return 0;
}

另一個例子:

class Array{
public:
    Array(){
        m_iCount = 5;
    }
    Array(const Array& arr){    // 拷貝構造函數
        m_iCount = arr.m_iCount;
        m_pArr = arr.m_pArr;
    }
private:
    int m_iCount;
    int *m_pArr;
}

int main(){
    Array arr1;
    Array arr2 = arr1;  // 有問題的淺拷貝
    return 0;
}

問題所在:

淺拷貝.png

? 兩個對象arr1和arr2的各自的成員m_pArr都指向了同一內存,arr2的成員m_pArr的賦值操作將會覆蓋掉arr1的成員m_pArr。最嚴重的是當arr1和arr2對象先后被銷毀時,二者的成員m_pArr所指向的內存將會被釋放兩次!這將引起程序的崩潰。

2.我們所想要的是這樣子的:

我們想要的拷貝構造函數.png

如何做呢?

深拷貝:

深拷貝.png

? 使用數組,將每個元素都一一賦值。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容