我声明了一个名为“ Array”的c ++类,其成员为“ size”(数组的大小),并带有“ p”指向数组的指针。在“ main”函数中,我调用了“ Array”类的三个对象“ a1”,“ a2”和“ a3”。 “ a1”的数组大小为5,“ a2”是用“ a1”和“ a3”初始化的对象,称为“复制构造函数”,称为参数“ a1”。当程序运行时,析构函数被免费调用,内存指针“ p”。但是该程序因释放内存地址两次而出错(因为在c ++中对象初始化的按位复制)。请给我这个程序写下面的写解决方案。谢谢。
#include "pch.h"
#include <iostream>
class Array
{
int size;
int *p;
public:
static int count;
int obj;
public:
Array()
{
size = 8;
p = new int[size];
for (register int i = 0; i < size; i++)
{
p[i] = 2 * i + 1;
}
obj = count++;
}
Array(int size)
{
this->size = size;
p = new int[size];
for (register int i = 0; i < size; i++)
{
p[i] = 2 * i + 1;
}
obj = count++;
}
Array(const Array& cc)
{
size = cc.size;
p = new int[cc.size];
for (register int i = 0; i < size; i++)
{
p[i] = cc.p[i];
}
obj = count++;
}
void show()
{
for (register int i = 0; i < size; i++)
{
std::cout << p[i] << std::endl;
}
}
~Array()
{
std::cout << p << std::endl;
if (p != NULL)
{
delete[] p;
p = NULL;
}
}
};
int Array::count = 0;
int main()
{
Array a1(5);
Array a2 = a1;
Array a3(a1);
a2 = a1;
a2.show();
return 0;
}