class with point member(带指针的类),一定有copy ctor(拷贝构造)和copy op=(拷贝赋值)
浅拷贝(讲这个概念是为了跟你解释为什么一定要写自己的版本):
如果你不写拷贝构造和拷贝赋值,系统会为你默认生成这两个函数。
而用系统里面默认生成的函数,则会发生下图中a和b的指针都指向“HELLO”,而“WORLD”没有指针指着它(这种情况叫内存泄漏)。
两个指针指向同一块内存也是危险的,因为你通过a改变字符串的时候,b所指的内容也会随之改变。如图:
在编程里面。alias(别名)是一件危险的事情。
深拷贝如下图(拷贝构造的例子)
上图是自己写的拷贝构造函数:调用该函数之后,系统先申请内存,然后把传入的参数拷贝到新申请的空间上,这就是深拷贝。