美文网首页C/C++学习笔记
10.0 C++远征:深拷贝与浅拷贝

10.0 C++远征:深拷贝与浅拷贝

作者: 青_阳 | 来源:发表于2016-11-18 17:52 被阅读13次

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

使用数组,将每个元素都一一赋值。

相关文章

网友评论

    本文标题:10.0 C++远征:深拷贝与浅拷贝

    本文链接:https://www.haomeiwen.com/subject/adqspttx.html