博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅拷贝和深拷贝
阅读量:5291 次
发布时间:2019-06-14

本文共 776 字,大约阅读时间需要 2 分钟。

浅拷贝和深拷贝

  在某些状况下,类内成员变量需要动态开辟堆内存,如果实行位拷贝,也就是把对象里的值完全复制给另一个对象,如A=B。这时,如果B中有一个成员变量指针已经申请了内存,那A中的那个成员变量也指向同一块内存。这就出现了问题:当B把内存释放了(如:析构),这时A内的指针就是野指针了,出现运行错误。

  深拷贝和浅拷贝可以简单理解为:如果一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝,反之,没有重新分配资源,就是浅拷贝。下面举个深拷贝的例子。

 

1 #include 
2 using namespace std; 3 class CA 4 { 5  public: 6   CA(int b,char* cstr) 7   { 8    a=b; 9    str=new char[b];10    strcpy(str,cstr);11   }12   CA(const CA& C)13   {14    a=C.a;15    str=new char[a]; //深拷贝16    if(str!=0)17     strcpy(str,C.str);18   }19   void Show()20   {21    cout<
<

 

 

深拷贝和浅拷贝的定义可以简单理解成:如果一个类拥有资源(堆,或者是其它系统资源),当这个类的对象发生复制过程的时候,这个过程就可以叫做深拷贝,反之对象存在资源,但复制过程并未复制资源的情况视为浅拷贝。

浅拷贝资源后在释放资源的时候会产生资源归属不清的情况导致程序运行出错。

 

参考资料:

 

转载于:https://www.cnblogs.com/Kiven5197/p/8902212.html

你可能感兴趣的文章
为什么要用日志框架 Logback 基本使用
查看>>
Cannot open precompiled header file: 'Debug/<Project-Name>.pch': No such fil
查看>>
实用Android开发工具和资源精选
查看>>
TileMap
查看>>
设计模式-中介者模式(Mediator)
查看>>
JS属性大全
查看>>
JavaScript位运算符 2
查看>>
XE 画矩形实现拖拉改变大小(属性)
查看>>
Java多线程—使用初步
查看>>
java复制文件
查看>>
CSS垂直居中和水平居中的几种方法
查看>>
String
查看>>
easydict的使用方法
查看>>
第一册:lesson seventy nine.
查看>>
查看webservice服务下的所有方法和参数类型
查看>>
GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例
查看>>
团队作业
查看>>
数据持久化时的小bug
查看>>
用户模块 之 完成用户列表的分页显示
查看>>
linux heartbeat v2/v3 的一点资料
查看>>