纸上得来终觉浅,绝知此事要躬行 ---

  今天对此话有了实际的领悟。之前学习C++的时候,自以为已经把深复制和复制构造函数等这些知识已经掌握了,但真正写起项目来的时候,还是不能提前考虑这些问题,直到问题出现,然后慢慢找出原因才开始根据以前的知识修改代码。

  项目中使用到了这个弧形类

/*圆弧类*/
class Curve:public Graph
{int pointCount;Point *points;
public:Curve(Point *points,int pointCount);Curve(const Curve &_curve);~Curve();void draw(Graphics* graphics,Pen* pen);
};

  明显points指针需要深复制,因此需要重写copy constructor。但由于Curve类之前一直都是使用一次就析构,因此没有重写复制构造函数也没问题。

/*元器件类*/
class Component
{vector<Line> lines;vector<Curve> curves;vector<Circle> circles;vector<Text> texts;
public:Component();//~Component();void pushLine(Line _line);//每次放入一条线void pushCurve(Curve _curve);//每次放入一条弧线void pushCircle(Circle _circle);//每次放入一个圆形void pushText(Text _text);//每次放入一段文本void draw(Drawer _drawer);//绘制这个元器件
};

  后来,新增了一个元器件类封装了这些图形。然后就出错了,思考后发现出错的原因是:放入component之前的curve实例析构了一次,然后component析构是vector里面的curve又析构了一次,就是第二次析构的时候delete了一个已经释放的内存空间,因此出现了运行时错误。

  既然出现了问题,解决的方案也很明显,重写copy constructor进行深复制。

转载于:https://www.cnblogs.com/iyjhabc/p/3501595.html

[C++]有关深复制与copy constructor的一些问题与实例相关推荐

  1. Python中的浅复制(shallow copy)和深复制(deep copy)

    文章目录 python值管理方式 深复制与浅复制的使用及区别 近期杂事太多,博客一直没更新,9月最后一天了,总得写点吧 今天记一下以前碰到过,最近又碰到的问题:python的深复制和浅复制 神奇的py ...

  2. 浅复制(Shallow Copy)与深复制(Deep Copy)

    复制:对象的复制是生成一个与指定对象完全一样的新对象,实现的方式根据定义可以知道,新建一个类型相同的对象,然后复制原对象的每一个成员和字段. 浅复制: class Program{static voi ...

  3. python学习 - copy模块的浅复制(copy)与深复制(deepcopy)

    python学习 - copy模块的浅复制(copy)与深复制(deepcopy) 简介 copy.copy()详解 copy.deepcopy()详解 简介 在使用列表或者字典进行传递参数的时候,可 ...

  4. JavaScript 复制对象与Object.assign方法无法实现深复制

    在JavaScript这门语言中,数据类型分为两大类:基本数据类型和复杂数据类型.基本数据类型包括Number.Boolean.String.Null.String.Symbol(ES6 新增),而复 ...

  5. java clone 深复制_Java的clone():深复制与浅复制

    Java中要想自定义类的对象可以被复制,自定义类就必须实现Cloneable中的clone()方法,如下: 1 public class Student implements Cloneable { ...

  6. numpy的深复制与浅复制的区别_Python之Numpy基础,强大到让你五体投地

    以前总认为Numpy是渣渣,直到深入接触以后才知道功能这么强大.堪比Matlab啊.果然是人生苦短,我用Python,所以本文作为一个记录&笔记,文章内容大多数取自网络以&官网快速入门 ...

  7. iOS 集合的深复制与浅复制

    2019独角兽企业重金招聘Python工程师标准>>> 概念 对象拷贝有两种方式:浅复制和深复制.顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针:深复制是直接拷贝整个对 ...

  8. Python的浅复制和深复制区别

    浅复制:copy().= 深复制:copy.deepcopy() 浅复制的列表在原列表更改内层元素时会相应改变 深复制的列表在原列表更改内层元素时不会相应改变 import copy lt=[1,2, ...

  9. SV学习笔记—浅复制和深复制的区别详解

    目录 1.句柄的复制 2.对象的复制 2.1浅复制shallow copy 2.2深复制deep copy 3.this的用法 在类中,复制一半会涉及到句柄的复制,浅复制和深复制3种操作,下面来看看这 ...

最新文章

  1. 女程序员婚前买房给父母住,婚后要求男程序员一起还房贷!男程序员怀疑婚姻!...
  2. 代写SOFTENG 370 Operating Systems课设、代做C/C++ 留学生作业、代写c/c++代码、代写C/C++编程作业...
  3. 一、面试题(持续跟新)
  4. python3爬虫入门(urllib和requests简单使用)
  5. python读取视频分辨率_Python实现以不同分辨率分类视频
  6. 探讨JS合并两个数组的方法
  7. Java 之 内部类
  8. 【变色龙】app封装系统源码+完美版在售封装系统
  9. php简单记账本_代理记账的三种方式
  10. redis缓存跟数据库数据不一致问题解决
  11. 【文件包含、宏、条件编译】(学习笔记21--预处理命令)
  12. linux任务计划详解
  13. Select2 鼠标点击空白处不消失简单测试和解决方法
  14. 基于WCF的RESTFul WebAPI如何对传输内容实现压缩
  15. 使用VMware创建DOS虚拟机
  16. 简单的STM32汇编程序
  17. html5设置图片为页面背景透明度,纯CSS设置图片半透明,DIV半透明,背景半透明的方法...
  18. 东芝复印机2303出现f070_东芝复印机常见故障
  19. 删除页眉页脚中横线的方法
  20. CSS3+JavaScript效果:胶卷式放映

热门文章

  1. 全志A33-ARM开发板通过NFS与Ubuntu共享文件
  2. 31312312312iiiii
  3. 2019年最新银行存款利息,有的银行最高给到5.45%
  4. 计算机二级mysql是什么_计算机二级mysql考什么内容?
  5. python杨辉三角函数公式大全_python-1-杨辉三角算法总结
  6. linux games账号,linux for games
  7. python 窗口程序开发课程_从零开始学Python - 第019课:使用PyCharm开发Python应用程序...
  8. matlab 图像旋转补色,旋转互补色光学错觉
  9. oracle替代变量输出,【Oracle】替代变量
  10. 【caffe-windows】全卷积网络特征图分析