August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
对于大多数程序员和大多数程序设计语言,拷贝都是一个重要问题。一个基本问题是你应该拷贝一个指针(或引用)还是应该拷贝指针指向(或引用)的数据:
·浅拷贝(shallow copy)只拷贝指针,因此两个指针会指向同一个对象。指针和引用类型就是进行浅拷贝。
·深拷贝(deep copy)将拷贝指针指向的数据,因此两个指针将指向两个不同的对象。vector与string都实现了深拷贝。当类对象需要深拷贝时,我们需要为其定义拷贝构造函数和拷贝赋值操作。
下面是一个浅拷贝的例子:
结果可图示如下:
与之相对,我们也可以进行深拷贝:
结果如下图所示:
从拷贝术语可以看出,我们原来的vector的问题在于它只实现了浅拷贝,而不是拷贝指针elem指向的元素。而改进的vector则与标准库vector相似,实现了深拷贝:它为元素分配新的内存空间并进行元素的拷贝。实现了浅拷贝的类型(如指针与引用)被称为具有指针语义(pointer ...