zoukankan      html  css  js  c++  java
  • 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;
    }
    

    问题所在:

    两个对象arr1和arr2的各自的成员m_pArr都指向了同一内存,arr2的成员m_pArr的赋值操作将会覆盖掉arr1的成员m_pArr。最严重的是当arr1和arr2对象先后被销毁时,二者的成员m_pArr所指向的内存将会被释放两次!这将引起程序的崩溃。

    2.我们所想要的是这样子的:

    如何做呢?

    深拷贝:

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

  • 相关阅读:
    ubuntu10官方镜像安装硬盘自动分区失败的问题
    ubuntu10的pci扩展卡驱动安装失败后检查方法
    day7集合
    day6字符编码
    day5 dict
    day4 list,tuple
    day2 int,bool,str
    day1
    函数一
    注册登录
  • 原文地址:https://www.cnblogs.com/xiaoqingyang/p/6076887.html
Copyright © 2011-2022 走看看