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
创建的。或 malloc
或 strcpy
或...
所以,答案是否定的 - 不是因为 Qt,而是因为 C++。
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
创建的。或 malloc
或 strcpy
或...
所以,答案是否定的 - 不是因为 Qt,而是因为 C++。