一.基于new函数的浅拷贝
二.基于copy函数的深拷贝
深拷贝的关键在于创建自己的copy函数实现层层嵌套下的拷贝。
如果只有一个简单的类,不包含任何其他类的引用,那么编写copy函数非常容易。
对于并非简单的类,包含对其他类的调用(句柄),那么需要在调用类添加copy函数,并且在本类copy函数中通过调用调用类copy函数来完成对调用类的句柄传递。
对于子类继承父类的深拷贝。
三.句柄的传递以及类型转换(包括动态转换$cast)
图四空白处需要填入的代码为
$cast(h, t);
在说明$cast的用法之前,我们先思考一个问题,子类句柄可以指向哪些对象?父类句柄可以指向哪些对象?
由于多态-virtual的存在,父类得以引用子类对象中的同名成员,该引用不能访问子类新增加的成员。
在工程中我们常常会遇到句柄类型向上转换(father_handle = child_handle)
当只有父类句柄指向的对象是真正的子类对象时,可以用cast使新的子类句柄指向该子类对象。
所以图四中添加了$cast(h, t);后,句柄
h将指向父类句柄
t所指向的
test_wr
注意,在本例中虽然
t定义为子类句柄,但在调用copy_data时形参为父类句柄,此时会进行隐式类型转化。