运算符重载:1.不能改变运算符的优先级
2.满足和系统提供的运算符相同的逻辑
3.不能创造新的运算符
浅拷贝:将原对象或原数组的引用直接赋给新对象,新数组,新对象/数组只是原对象的一个引用
用string生成一个对象str1,直接将对象赋给str2,共用一块内存。(原对象和新生成的对象共用一块实体)
影响:1.两个对象的_str指向同一片空间,那么析构的时候这片空间必然会析构两次。
2.一个的改变会影响另一个。
解决方案:深拷贝(每次都要重新开辟空间效率低)、使用引用计数
深拷贝:创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用”
str2重新开辟内存来保存str1赋过来的值
影响:深拷贝虽然每个指针会指向不同的空间,没有一个空间多次释放的问题,但可能保存的数据都是一样的,这样会导致空间的浪费。
写时拷贝:数据修改前(浅拷贝);数据修改时(深拷贝);在数据没修改之前共用一块内存,数据需要修改时重新开辟内存进行拷贝。