我的类有一个名为 A
的指针成员的泛型数组:
T** A
目前,我通过以下方式删除析构函数中的数组:
~MyQuickInitArray(){
delete [] A;
};
这会导致内存泄漏吗? 如果是这样,我应该遍历数组并在每个对象上调用delete
吗?
附带说明 - 如果B
是整数数组,我是否需要调用delete [] 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;
}
这会导致内存泄漏吗?
如果A
是一个指针数组,您当然可以依靠它。您需要遍历数组并自行删除指针。
~MyQuickInitArray {
for (int i =_size; i--;) {
delete A[i];
}
delete [] A;
}
如果
B
是整数数组,我是否需要调用delete [] B
还是析构函数处理它?
是的,始终删除与new
一起分配的内容。您可以在类的析构函数中执行此操作。
这会导致内存泄漏吗?
是的,在指针数组上调用delete[]
而不删除单个元素指向的项目将导致内存泄漏,因为C++的"内置"指针没有所有权语义。考虑使用"智能"指针,例如 unique_ptr<T>
而不是"普通"的,以避免在循环中调用析构函数。
如果 B 是整数数组,我是否需要调用删除 [] B
您需要对分配的所有内容调用delete[]
new[]
,无论数组的元素类型如何。