0

我的班级有一个通用的指针数组,名为A

T** A

目前,我通过以下方式删除析构函数中的数组:

~MyQuickInitArray(){
    delete [] A;
};

这会导致内存泄漏吗?如果是这样,我应该遍历数组并调用delete每个对象吗?

delete [] B附带说明 -如果B是整数数组或析构函数是否已经处理它,我是否需要调用?

编辑:

这是分配发生的方式:

MyQuickInitArray(int size)
{
    if(size <= 0)
    {
        throw new std::exception;
    }

    _size = size;
    _counter = 0;
    A = new T*[size];
    B = new int[size];
    C = new int[size];
}
    MyQuickInitArray(const MyQuickInitArray& myQuickInitArray)
    {
        _size = myQuickInitArray._size;
        _counter = myQuickInitArray._counter;
        A = new T*[_size];

        for(int i = 0; i<_size ;i++)
        {
            if(myQuickInitArray.A[i] != NULL)
            {
                A[i] = new T(*myQuickInitArray.A[i]);
            }
        }

        B = myQuickInitArray.B;
        C = myQuickInitArray.C;
    }
4

2 回答 2

2

这会导致内存泄漏吗?

A如果是指针数组,您肯定可以指望它。您需要遍历数组并自己删除指针。

~MyQuickInitArray {
    for (int i =_size; i--;) {
        delete A[i];
    }
    delete [] A;
}

我需要调用delete [] BifB是一个整数数组还是析构函数处理它?

是的,总是删除分配给new. 您可以在类的析构函数中执行此操作。

于 2013-01-27T15:15:13.600 回答
1

这会导致内存泄漏吗?

是的,delete[]在不删除单个元素指向的项目的情况下调用指针数组将导致内存泄漏,因为 C++ 的“内置”指针没有所有权语义。考虑使用“智能”指针,例如,unique_ptr<T>而不是“普通”指针,以避免在循环中调用析构函数。

如果 B 是整数数组,我是否需要调用 delete [] B

无论数组的元素类型如何,您都需要调用delete[]您分配的所有内容。new[]

于 2013-01-27T15:14:32.060 回答