1.浅拷贝
将值直接拷贝过去
只是对指针的拷贝,拷贝之后两个指针指向同一块内存,会造成系统奔溃
class Array
{
public:
Array(int count);
Array(const Array &arr);
~Array();
void setCount(int count);
int getCount();
void printAddr();
private:
int m_iCount;
int *m_pAir;
};
#include <iostream>
#include "Array.h"
using namespace std;
Array::Array(int count)
{
m_iCount = count;
m_pAir = new int [m_iCount];
cout << "Array"<< endl;
}
Array::Array(const Array &arr)
{
m_pAir = arr.m_pAir; //指向同一块内存
m_iCount = arr.m_iCount;
cout << "Array &"<<endl;
}
Array :: ~Array()
{
delete []m_pAir;
m_pAir = NULL;
cout << "~Array"<<endl;
}
void Array::setCount(int count)
{
m_iCount = count;
}
int Array::getCount()
{
return m_iCount;
}
void Array::printAddr()
{
cout << m_pAir<<endl;
}
#include <iostream>
#include "Array.h"
using namespace std;
int main()
{
Array arr1(5);
// arr1.setCount(5);
Array arr2(arr1);
arr1.printAddr();
arr2.printAddr();
//cout << "arr2.m_iCount = " << arr2.getCount() << endl;
return 0;
}
![]()
2.深拷贝
不但对指针实现拷贝,还对指针指向的内容实现拷贝,拷贝之后两个指针指向不同的内存。
类里有个成员是指针,必须实现深拷贝
class Array
{
public:
Array(int count);
Array(const Array &arr);
~Array();
void setCount(int count);
int getCount();
void printAddr();
private:
int m_iCount;
int *m_pAir;
};
#include <iostream>
#include "Array.h"
using namespace std;
int main()
{
Array arr1(5);
// arr1.setCount(5);
Array arr2(arr1);
arr1.printAddr();
arr2.printAddr();
//cout << "arr2.m_iCount = " << arr2.getCount() << endl;
return 0;
}
#include <iostream>
#include "Array.h"
using namespace std;
Array::Array(int count)
{
m_iCount = count;
m_pAir = new int [m_iCount];
for(int i = 0; i < m_iCount; i++)
{
m_pAir[i] = i;
}
cout << "Array"<< endl;
}
Array::Array(const Array &arr)
{
m_iCount = arr.m_iCount;
m_pAir = new int[m_iCount];
for(int i = 0; i < m_iCount;i++)
{
m_pAir[i] = arr.m_pAir[i];
}
cout << "Array &"<<endl;
}
Array :: ~Array()
{
delete []m_pAir;
m_pAir = NULL;
cout << "~Array"<<endl;
}
void Array::setCount(int count)
{
m_iCount = count;
}
int Array::getCount()
{
return m_iCount;
}
void Array::printAddr()
{
cout << m_pAir<<endl;
}