·默认拷贝构造函数可以完成对象的数据成员值简单地复制-----浅拷贝

·对象的数据资源是由指针指示的堆时,默认拷贝构造函数仅作指针值的复制,需要显式定义拷贝构造函数-----深拷贝

首先定义几个点:

Point p1("home",1.0,2.0),p2("school",3.0),p3;

Point p1("home",1.0,2.0),p2("school",3.0),p3;
Point p4 = p1;

浅拷贝:

深拷贝:

自定义的拷贝构造函数:

 Point::Point(Point &p):x(p.x),y(p.y)
{
if(p.name)
{
name=new char[strlen(p.name)+];
strcpy(name,p.name);
}
else
{
name=new char[];
strcpy(name,"no name");
}
cout<<name<<" copy constructing”;
}

注:若是浅拷贝,当p1先执行析构函数之后,name所指向的内存被释放掉;当p4再执行析构函数的时候,由于p1和p4中的name指向的是同一块地址空间,因此会因为对同一块地址释放两次内存而报错。但深拷贝就没有这个风险。

标记拷贝构造

对于深拷贝,需要把资源复制一份,而有时候资源很大,复制需要大量的时间和空间,甚至有些资源是不可复制的,这时深拷贝是不可取的,为此,可以选择带标记的拷贝构造。

原理:通过一个标志位flag来确定当前对象是拷贝生成的还是构造生成的;在析构函数中对拷贝生成的对象不释放额外资源,原始生成的对象析构时才能释放额外资源,从而解决了同一个资源空间被释放多次的问题。

最新文章

  1. Castle Core 4.0.0 alpha001发布
  2. Excel 相对引用与绝对引用
  3. c语言语系的命名风格和java系命名风格
  4. edittext 监听内容变化
  5. css布局实践总结(part2)
  6. 【数学/扩展欧几里得/线性求逆元】[Sdoi2008]沙拉公主的困惑
  7. 基于野火M3开发板(STM32F103VET6)的迷宫小球(重力感应控制)游戏开发
  8. 搜狗一道java题目 关于对象 synchronized 关键字作用在 int, integer
  9. uva 111 History Grading(最长公共子序列)
  10. Error与Exception的区别
  11. Secondary Namenode - What it really do?
  12. ural1126 Magnetic Storms
  13. SQL SERVER运维日记--收缩数据库
  14. SQL注入详细介绍及如何防范SQL注入式攻击
  15. usaco training 4.2.3 Job Processing 题解
  16. Android的Environment.getExternalStorageState的使用
  17. 1、Linux文件结构介绍
  18. Java 前后端List传值
  19. radio,check美化
  20. 12.Redis运维点

热门文章

  1. Zookeeper 面试总结
  2. Lintcode算法
  3. 简易的vuex用法
  4. MAC和windows开发操作系统环境,解决Maven工程中报 Missing artifact jdk.tools:jdk.tools
  5. IO复用——select系统调用
  6. html中显示指数、底数
  7. MongoDB入门---简介
  8. python基础集结号
  9. kill -9 vs killall
  10. 《python核心编程第二版》第7章习题