下面随笔给出c++中深层复制(浅层复制运行错误)成功运行------sample。

浅层复制与深层复制

  • 浅层复制

    • 实现对象间数据元素的一一对应复制。

  • 深层复制

    • 当被复制的对象数据成员是指针类型时,不是复制该指针成员本身,而是将指针所指对象进行复制。

浅层复制-系统默认复制构造函数(运行错误)

 1 //例 对象的浅层复制
2
3 #include <iostream>
4
5 #include <cassert>
6
7 using namespace std;
8
9 class Point {
10
11 //类的声明略
12
13 //……
14
15 };
16
17 class ArrayOfPoints {
18
19 //类的声明略
20
21 //……
22
23 };
24
25
26
27 int main() {
28
29   int count;
30
31   cout << "Please enter the count of points: ";
32
33   cin >> count;
34   
35   ArrayOfPoints pointsArray1(count); //创建对象数组
36
37   pointsArray1.element(0).move(5,10);
38
39   pointsArray1.element(1).move(15,20);
40
41
42
43   ArrayOfPoints pointsArray2(pointsArray1); //创建副本
44
45
46
47   cout << "Copy of pointsArray1:" << endl;
48
49   cout << "Point_0 of array2: " << pointsArray2.element(0).getX() << ", "
50
51   << pointsArray2.element(0).getY() << endl;
52
53   cout << "Point_1 of array2: " << pointsArray2.element(1).getX() << ", "
54
55   << pointsArray2.element(1).getY() << endl;
56
57   pointsArray1.element(0).move(25, 30);
58
59   pointsArray1.element(1).move(35, 40);
60
61
62
63   cout<<"After the moving of pointsArray1:"<<endl;
64
65
66
67   cout << "Point_0 of array2: " << pointsArray2.element(0).getX() << ", "
68
69   << pointsArray2.element(0).getY() << endl;
70
71   cout << "Point_1 of array2: " << pointsArray2.element(1).getX() << ", "
72
73   << pointsArray2.element(1).getY() << endl;
74
75
76
77   return 0;
78
79 }

运行结果如下:

 1 Please enter the number of points:2
2
3 Default Constructor called.
4
5 Default Constructor called.
6
7 Copy of pointsArray1:
8
9 Point_0 of array2: 5, 10
10
11 Point_1 of array2: 15, 20
12
13 After the moving of pointsArray1:
14
15 Point_0 of array2: 25, 30
16
17 Point_1 of array2: 35, 40
18
19 Deleting...
20
21 Destructor called.
22
23 Destructor called.
24
25 Deleting... //接下来程序出现运行错误。

深层复制-自己定义的复制构造函数(运行正确)

 1 //例 对象的深层复制
2
3 #include <iostream>
4
5 #include <cassert>
6
7 using namespace std;
8
9 class Point { //类的声明略
10
11 };
12
13 class ArrayOfPoints {
14
15 public:
16
17   ArrayOfPoints(const ArrayOfPoints& pointsArray);
18
19 //其他成员略
20
21 };
22
23   ArrayOfPoints::ArrayOfPoints(const ArrayOfPoints& v) {
24
25     size = v.size;
26
27     points = new Point[size];
28
29     for (int i = 0; i < size; i++)
30
31     points[i] = v.points[i];
32
33   }
34
35 int main() {
36
37 //同
38
39 }

程序的运行结果如下:

 1 Please enter the number of points:2
2
3 Default Constructor called.
4
5 Default Constructor called.
6
7 Default Constructor called.
8
9 Default Constructor called.
10
11 Copy of pointsArray1:
12
13 Point_0 of array2: 5, 10
14
15 Point_1 of array2: 15, 20
16
17 After the moving of pointsArray1:
18
19 Point_0 of array2: 5, 10
20
21 Point_1 of array2: 15, 20
22
23 Deleting...
24
25 Destructor called.
26
27 Destructor called.
28
29 Deleting...
30
31 Destructor called.
32
33 Destructor called.

c++中深层复制(浅层复制运行错误)成功运行-----sample的更多相关文章

  1. java数组对象的浅层复制与深层复制

    实际上,java中数组对象的浅层复制只是复制了对象的引用(参考),而深层复制的才是对象所代表的值.

  2. Java中的Clone机制(浅层复制)

    浅层复制代码: import java.util.*; class Int{ private int i; public Int(int ii){i = ii;} public void increm ...

  3. .net中String是引用类型还是值类型 以及 C#深层拷贝浅层拷贝

    http://www.cnblogs.com/yank/archive/2011/10/24/2204145.html http://www.cnblogs.com/zwq194/archive/20 ...

  4. iOS 浅复制和深复制的深层理解,含示例

    转载:https://www.zybuluo.com/MicroCai/note/50592 版权归 @MicroCai 所有 以下是正文: 浅复制就是指针拷贝:深复制就是内容拷贝. 集合的浅复制 ( ...

  5. java中浅层克隆和深层克隆

    1.浅复制与深复制概念 浅复制(浅克隆)     被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象 ...

  6. JAVA中浅复制与深复制 - coolmist - ITeye技术网站

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  7. Java中引用的浅复制和深复制

    Java中除了基本类型int,char,double等的赋值是按照值传递之外,其余的类型和对象都是按照引用进行传递的. 下面来看一个关于引用的例子. package referenceCopy;// ...

  8. c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程

    c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...

  9. Java中的浅复制和深复制 Cloneable clone

    先看一个简单案例 public class Test {     public static void main(String args[]) {         Student stu1 = new ...

随机推荐

  1. [已完成+附代码]CS:APP:Lab6-ShellLab

    由于我的第五个实验的partB部分一直出问题.而且修了好久没解决先不管了 这个实验建议一定要认真读完csapp全书的第八章.不然可能会毫无思路.千万不要上来直接做. 0. 环境配置和实验下载 利用do ...

  2. Rsyncd 同步服务

    目录 数据备份的策略 三种数据备份 三种数据备份的比较(转载) 不同数据备份类型组合说明(转载) Rsyncd 服务传输模式(remote synchronizetion deamon) 本地传输模式 ...

  3. haut-1282 ykc想吃好吃的

    1282: ykc想吃好吃的 时间限制: 1 秒  内存限制: 128 MB提交: 706  解决: 89提交 状态 题目描述 一天,ykc在学校闲的无聊,于是决定上街买点吃的,ykc很懒,本来就不是 ...

  4. mysql(四)------Mysql中的锁

    1. 2 MySQL InnoDB 锁的基本类型 https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html 官网把锁分成了 8 类.所以我 ...

  5. HDU 3247 Resource Archiver(AC自动机 + 状压DP + bfs预处理)题解

    题意:目标串n( <= 10)个,病毒串m( < 1000)个,问包含所有目标串无病毒串的最小长度 思路:貌似是个简单的状压DP + AC自动机,但是发现dp[1 << n][ ...

  6. Vue3(四)从jQuery 转到 Vue工程化 的捷径

    不会 webpack 还想学 vue 工程化开发 的福音 熟悉jQuery开发的,学习vue的简单使用是没用啥问题的,但是学习vue的工程化开发方式,往往会遇到各种问题,比如: webpack.nod ...

  7. 智能广告投放平台 All in One

    智能广告投放平台 All in One app demos 知之数据 一站式广告营销平台 https://hio.cn/ refs https://www.jonmellman.com/posts/p ...

  8. Koa & WebSocket inAction

    Koa & WebSocket inAction node.js https://koajs.com/ ping / pong socket.io client send 2 as ping ...

  9. iPadOS 14 memoji 无法使用 bug

    iPadOS 14 memoji 无法使用 bug iPadOS 14 bug refs 如何在 iPhone 和 iPad Pro 上使用动话表情 https://support.apple.com ...

  10. js script all in one

    js script all in one 你不知道的 js secret https://html.spec.whatwg.org/multipage/scripting.html https://h ...