栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

深拷贝和浅拷贝

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

深拷贝和浅拷贝

 拷贝构造也是一种特殊的构造函数,格式为:

    类名(const 类名& that)  // const可加可不加,但是加更好
    {
        
    }
    什么时候调用拷贝构造:
        当使用旧的对象给新对象初始化时,就会自动调用拷贝构造
        Test t1;        //  调用无参构造
        Test t2 = t1;   //  自动调用拷贝构造

    拷贝构造的任务:
        顾名思义拷贝构造负责把旧对象中的成员变量拷贝给新对象,而且编译器默认生成的具有该功能的拷贝构造函数

    什么时候需要显式地实现拷贝构造函数:
        普通情况下编译器自动生成的拷贝构造(浅拷贝)完全够用,但是当类中的成员有指针且为指针分配了堆内存时,默认的拷贝构造只会对指针变量的值进行拷贝,这样导致两个对象的指针成员指向同一块堆内存,在执行析构函数时,就会造成重复释放堆内存导致内存崩溃,这种情况就应该显式地实现拷贝构造函数(深拷贝)。

深拷贝和浅拷贝的区别
    浅拷贝:系统默认调用,对指针进行拷贝后会出现两个指针指向同一个内存空间,程序结束时,该内存会被释放两次,导致程序崩溃
    深拷贝:在对含有指针的对象进行拷贝时,自己定义拷贝构造函数,使拷贝后的对象指针成员有自己的内存空间,即进行深拷贝,这样就避免了内存泄漏发生。

        浅拷贝只是对指针的拷贝,拷贝后两个指针指向同一个内存空间,深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/458031.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号