景区网站建设原则,聚成网络网站建设,台州椒江区建设局网站,成都网页设计设公司纸上得来终觉浅#xff0c;绝知此事要躬行 --- 今天对此话有了实际的领悟。之前学习C的时候#xff0c;自以为已经把深复制和复制构造函数等这些知识已经掌握了#xff0c;但真正写起项目来的时候#xff0c;还是不能提前考虑这些问题#xff0c;直到问题出现#xff0c;…纸上得来终觉浅绝知此事要躬行 --- 今天对此话有了实际的领悟。之前学习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
{vectorLine lines;vectorCurve curves;vectorCircle circles;vectorText 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