c++深拷贝与浅拷贝是什么
这篇文章主要介绍“c++深拷贝与浅拷贝是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“c++深拷贝与浅拷贝是什么”文章能帮助大家解决问题。
创新互联-专业网站定制、快速模板网站建设、高性价比翁源网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式翁源网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖翁源地区。费用合理售后完善,十载实体公司更值得信赖。

基于以上内容,很容易可以想到,浅拷贝比深拷贝要更快,但是,从拷贝的意义上来看,浅拷贝相较于深拷贝,要欠缺一点。
实例如下:
#includeusing namespace std;//20200430 公众号:C语言与CPP编程class CopyDemo{public:CopyDemo(int pa,char *cstr) //构造函数,两个参数{this->a = pa;this->str = new char[1024]; //指针数组,动态的用new在堆上分配存储空间strcpy(this->str,cstr); //拷贝过来}//没写,C++会自动帮忙写一个复制构造函数,浅拷贝只复制指针,如下注释部分//CopyDemo(CopyDemo& obj)//{// this->a = obj.a;// this->str = obj.str; //这里是浅复制会出问题,要深复制//}CopyDemo(CopyDemo& obj) //一般数据成员有指针要自己写复制构造函数,如下{this->a = obj.a;// this->str = obj.str; //这里是浅复制会出问题,要深复制this->str = new char[1024];//应该这样写if(str != 0)strcpy(this->str,obj.str); //如果成功,把内容复制过来}~CopyDemo() //析构函数{delete str;}public:int a; //定义一个整型的数据成员char *str; //字符串指针};int main(){CopyDemo A(100,"hello!!!");CopyDemo B = A; //复制构造函数,把A的10和hello!!!复制给Bcout <<"A:"<< A.a << "," <//输出A:100,hello!!!cout <<"B:"<< B.a << "," <//输出B:100,hello!!!//修改后,发现A,B都被改变,原因就是浅复制,A,B指针指向同一地方,修改后都改变B.a = 80;B.str[0] = 'k';cout <<"A:"<< A.a << "," <//输出A:100,kello!!!cout <<"B:"<< B.a << "," <//输出B:80,kello!!!return 0;}
根据上面实例可以看到,浅复制仅复制对象本身(其中包括是指针的成员),这样不同被复制对象的成员中的对应非空指针会指向同一对象,被成员指针引用的对象成为共享的,无法直接通过指针成员安全地删除(因为若直接删除,另外对象中的指针就会无效,形成所谓的野指针,而访问无效指针是危险的;除非这些指针有引用计数或者其它手段确保被指对象的所有权);而深复制在浅复制的基础上,连同指针指向的对象也一起复制,代价比较高,但是相对容易管理。
关于“c++深拷贝与浅拷贝是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注创新互联行业资讯频道,小编每天都会为大家更新不同的知识点。
网页题目:c++深拷贝与浅拷贝是什么
本文地址:http://www.jxjierui.cn/article/jidesp.html


咨询
建站咨询
