Array.h
#ifndef ARRAY_H
#define ARRAY_H
#include <iostream>
using namespace std;
class Array{
public:
Array(int m_iCount);
Array(const Array &arr);
~Array();
void setCount(int count);
int getCount();
void printf();
int *pArr;
private:
int m_iCount;
};
#endif // ARRAY_H
Array.cpp
#include "array.h"
#include <iostream>
using namespace std;
Array::Array(int count)
{
m_iCount = count;
pArr = new int[m_iCount];
for (int i = 0; i < m_iCount; i++)
{
pArr[i] = i;
}
cout << "Array()" << endl;
}
Array::Array(const Array &arr)
{
//pArr = arr.pArr;
//m_iCount = arr.m_iCount;// 浅拷贝,指向同一个内存地址,析构的时候有错误
m_iCount = arr.m_iCount; //改为深层拷贝,重新开辟了内存,指向了两个地址
pArr = new int[m_iCount];
for (int i = 0; i < m_iCount; i++)
{
pArr[i] = arr.pArr[i];//拷贝arr中的数值
}
cout << "Array(const Array &arr)" << endl;
}
Array::~Array()
{
delete[]pArr;
pArr = NULL;
cout << "~Array()" << endl;
}
void Array::setCount(int count)
{
m_iCount = count;
}
int Array::getCount()
{
return m_iCount;
}
void Array::printf()
{
cout << pArr << endl;
}
void Array::printArr()
{
for (int i = 0; i < m_iCount; i++)
{
cout << pArr[i] << endl;
}
}
出错的信息:
浅拷贝,指向同一个内存地址,析构的时候有错误,不能够同一块内存,析构两遍,所以程序崩溃。
main.cpp
#include <iostream>
#include "array.h"
using namespace std;
int main(int argc, char *argv[])
{
Array arr1(5);
//arr1.setCount(5);
Array arr2(arr1);
arr1.printf();
arr2.printf();
// cout << "arr1 " << arr1.getCount() << endl;
// cout << "arr2 " << arr2.getCount() << endl;
arr1.printArr();
arr2.printArr();
system("pause");
return 0;
}
最后得到: