713拷贝与深拷贝 如果类中有一个数据成员为指针, 堆对 该类的一个对象ob]1中的这个指针p, 象 指向了动态分配的一个堆对象,(参见 图71拷贝前),如果用obj1按成员拷 贝了一个对象obj2,这时obj2p也指 向同一个堆对象。当析构时,如用缺省 的析构函数,则动态分配的堆对象不能 回收。如果在析构函数中有“ delete 堆对 p;”语句,则如果先析构函数ob]1时, 象 堆对象已经释放,以后再析构obj2时 出现了二次释放的问题。这时就要重新 定义拷贝的构造函数,给每个对象独立 分配一个堆对象,称 图72深拷贝
7.1.3 浅拷贝与深拷贝 如果类中有一个数据成员为指针, 该类的一个对象obj1中的这个指针p, 指向了动态分配的一个堆对象,(参见 图7.1拷贝前),如果用obj1按成员拷 贝了一个对象obj2,这时obj2.p也指 向同一个堆对象。当析构时,如用缺省 的析构函数,则动态分配的堆对象不能 回收。如果在析构函数中有“delete p;”语句,则如果先析构函数obj1时, 堆对象已经释放,以后再析构obj2时 出现了二次释放的问题。这时就要重新 定义拷贝的构造函数,给每个对象独立 分配一个堆对象,称深拷贝。 堆 对 P 象 P 堆 对 象 图7.2 深拷贝
713拷贝与深拷贝 [例73]定义拷贝构造函数( copy structor)和拷贝 赋值操作符( copy Assignment Operator)实现深 拷贝 程序:Ex73cpp 最常用 拷贝构造函数自 构函 构资 函数。对象 DU
7.1.3 浅拷贝与深拷贝 [例7.3]定义拷贝构造函数(copy structor)和拷贝 赋值操作符(copy Assignment Operator)实现深 拷贝。 程序:Ex7_3.cpp 堆内存是最常用的需要拷贝构造函数自定义的资 源,如果类需要析构函数来析构资源,则类也需要一 个自定义的拷贝构造函数。对象的拷贝就是深拷贝了
72链与能表的基操作⑩ N 线性表是最简单。最常用的一种数 据结拘。缆性表的逻辑结构是n个教据完 素的有限序列(a1,a2,…,an)。而线性 表的物理结构,我们已经学习对顺序衰 也就是数组,另一种线性表的物理结 构 链表 DU
7.2 链表与链表的基本操作 线性表是最简单,最常用的一种数 据结构。线性表的逻辑结构是n个数据元 素的有限序列(a1,a2,…,an)。而线性 表的物理结构,我们已经学习过顺序表, 也就是数组 ;另一种线性表的物理结 构——链表
7.2篚表与链表的基碑搡作 7.2.1单链表基本算法 7.2.2单链表类型模板 7.2.3双向链表 DU
7.2 链表与链表的基本操作 7. 2. 1 单链表基本算法 7. 2. 3 双向链表 7. 2. 2单链表类型模板
(7.21单链表基啐算法 单链表( Singly Linked list)也称线性链表。每个数据元素占用一个节 点(Node)。一个节点包含两个域,一个域存放数据元素info,其数据类 型由应用问题决定,另一个存放指向该链表中下一个节点的指针link。节点 定义如下 typedef int Datatype;/数据为整型 struct node Datatype info; node *link; info 00 Into info info haed DU 图73单向链表结构
7.2.1 单链表基本算法 单链表(Singly Linked list)也称线性链表。每个数据元素占用一个节 点(Node)。一个节点包含两个域,一个域存放数据元素info,其数据类 型由应用问题决定,另一个存放指向该链表中下一个节点的指针link。节点 定义如下: typedef int Datatype; //数据为整型 struct node{ Datatype info; node *link; } info0 info1 info2 …… infon-1 ^ haed 图7.3 单向链表结构