qDeleteAll 和 new[]

qDeleteAll and new[]

1) 我可以使用 qDeleteAll() 删除使用 new[] 创建的对象数组吗?

QVector<int*> aVector;
int * a=new int[100];
for(int i=0;i<100;i++)
   a[i]=i;
aVector.push_back(a);
....
if(!aVector.isEmpty())
{
    qDeleteAll(aVector);
    aVector.clear();
}

2) qDeleteAll()是否实现删除QVector< QVector<*> >

QVector< QVector<int*> > v;
.....
qDeleteAll(v);

qDeleteAll 使用 C++ delete 运算符删除容器中的项目。所以你不能删除使用 new[]qDeleteAll 创建的对象。

关于第二个问题,它没有容器容器的任何超载。您应该在向量的每个项目上调用 qDeleteAll

foreach(QVector<int*> vector, v)
    qDeleteAll(vector);

回复问题1:问问自己,你会如何写出这样的qDeleteAll?一旦这样做,您就会意识到,任何以指针作为参数的函数通常都不可能确定它删除的对象是使用 new [] 还是 new 创建的。或 mallocstrcpy 或...

所以,答案是否定的 - 不是因为 Qt,而是因为 C++。