对象初始化发生时未删除类成员指针

时间:2019-06-25 07:38:32

标签: c++

我声明了一个名为“ 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;
}

0 个答案:

没有答案