#include<iostream>
using namespace std;
class Array
{
public:
//构造函数
Array(int sz)
:_sz(sz)
, _ptr(new int[_sz])
{
cout << "Array" << endl;
}
浅拷贝构造函数 //类成员变量有动态开辟,然后p1._str和p2._str指向同一段空间
//Array(const Array& cp) //调用两次析构函数,就会把_ptr里的空间重复释放,所以这里使用普通的拷贝方法行不通
//{
// _sz = cp._sz;
// _ptr = cp._ptr;
//}
//深拷贝构造函数
Array(const Array& cp) //必须使用这种方法进行拷贝,给this->_ptr动态开辟一段空间,在给其赋值
:_sz(cp._sz) //这样分布调用两次析构函数时,p1和p2各释放各的一段空间
, _ptr(new int[_sz])
{
cout << "Array(const Array& cp)" << endl;
}
~Array()
{
if (_ptr != NULL)
{
delete[] _ptr;
}
cout << "~Array" << endl;
}
private:
int _sz;
int *_ptr;
};
int main()
{
Array p1(5);
Array p2(p1);
return 0;
}