C++写时拷贝技术
1. 深拷贝与浅拷贝概念和优缺点
浅拷贝
:只拷贝指针地址。
通常默认拷贝构造函数与赋值运算符重载都是浅拷贝。
成员变量中没有指针的情况可以直接使用浅拷贝。
优点:共享一份内存,节省空间
缺点:在释放的时候可能会多次释放,造成内存泄漏
深拷贝
:重现分配堆内存,拷贝指针指向内容。
例如:String类
优点:每个指针指向不同的地址,避免了多次的释放
缺点:重复数据较多,占用空间
写时拷贝技术就是结合了深拷贝和浅拷贝各自的优点,实现数据相同时只有一份内存,不会出现多次释放问题。
2. 写时拷贝技术
写实拷贝一般是用来优化深拷贝
,而深拷贝是用在成员变量中含有指针的情况。
写实拷贝技术的原理是把类成员变量增加了个计数变量,然后再把成员变量封装起来,当遇到拷贝构造和赋值运算符的时候做浅拷贝,然后计数加一,析构的时候计数减一,当计数为零的时候释放指针。
正常的深拷贝:
#include <iostream>
using namespace std;
class Integer{
int* n;
public:
Integer(int num):n(new int(num)){
cout << __func__ << ":" << n << endl;
}
Integer(const Integer& integer):n(new int(*(integer.n))){
cout << __func__ << ":" << n << endl;
}
Integer& operator=