浅拷贝
自己没有定义复制构造函数的话,系统默认定义一个构造函数,该构造函数就是浅复制。
当一个对象被建立的时候,我们知道,通过我们定义的构造函数,系统会新建一个对象,包括两个成员变量
size
和data
。然后,构造函数会使用动态内存分配建立一个新的堆对象,并且让
data
指向这个堆对象。下图表示:如果我们自己不定义复制构造函数的话,系统默认的复制构造函数在调用的时候,就会建立一个完全相同的对象——换句话说,其
data
指针的地址也是完全相同的。这就意味着,新的对象所包含的
data
指针,指向的实际上是被复制的对象所建立的堆对象:
深拷贝
- 复制构造的对象应该有自己的堆对象,并且堆对象内存储的数据跟被复制的对象完全一样。
#include
//#include
#include
#include
using namespace std;
class vector{
private:
int * data;
int size;
public:
vector(int size){
this->size = size;
data=new int[size];
}
//深复制
vector(vector& v){
size=v.size;
data=new int[size];
for (int i = 0; i < size; i++) {
data[i]=v.data[i];
}
}
~vector(){
delete[] data;
}
void print() {
// 输出大小与地址
cout << size << " " << data << endl;
}
};
int main() {
vector v(10);
v.print();
vector v1(v);
v1.print();
return 0;
}