深浅拷贝示例:
#include <iostream>
#include <stdlib.h>
#include "Array.h"
using namespace std;
/*
示例安排:
1、定义一个Arry类
数据成员:m_iCount
成员函数:数据封装函数,构造函数,析构函数,拷贝构造函数(深浅拷贝)
2、增加
数据成员 m_pArr,并增加m_pArr地址查看函数,同时改造构造函数、拷贝构造函数、析构函数,
体会深拷贝的原理和必要性。
*/
class Array {
public:
Array(int count);
Array(const Array &arr);
~Array();
void setCount(int count);
int getCount();
void printAddr(); //地址打印
void printArr();
private:
int m_iCount;
int *m_pArr;
};
Array::Array(int count)
{
m_iCount = count;
m_pArr = new int[m_iCount];
for (int i = 0; i < m_iCount; i++) {
m_pArr[i] = i;
}
cout << "Array()" << endl;
}
Array::Array(const Array &arr)
{
m_iCount = arr.m_iCount;
//申请一段内存,然后将拷贝内容传递到这段内存中(深拷贝)
m_pArr = new int[m_iCount];
for (int i = 0; i < m_iCount; i++) {
m_pArr[i] = arr.m_pArr[i];
}
//m_pArr=arr.m_pArr;
cout << "Array(const Array &arr)" << endl;
}
Array::~Array()
{
delete[] m_pArr;
m_pArr = NULL;
cout << "~Array()" << endl;
}
void Array::setCount(int count)
{
m_iCount = count;
}
int Array::getCount()
{
return m_iCount;
}
void Array::printAddr()
{
cout << "m_pArr的值(地址)是" << m_pArr << endl;
}
void Array::printArr()
{
for (int i = 0; i < m_iCount; i++) {
cout << m_pArr[i] << endl;
}
}
int main()
{
Array arr1(5);
Array arr2(arr1);
arr1.printAddr();
arr2.printAddr();
arr1.printArr();
arr2.printArr();
system("pause");
return 0;
}
浅拷贝打印最终结果:
深拷贝打印结果: