c++ - qDeleteAll 和 new[]

标签 c++ qt memory-leaks delete-operator

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 创建的对象。

关于第二个问题,容器的容器没有任何重载。您应该对 vector 的每个项目调用 qDeleteAll:

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

关于c++ - qDeleteAll 和 new[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28765057/

相关文章:

c++ - 使用基接口(interface)类参数将派生类对象添加到 vector 中

c++ - 使用 Qt 搜索具有特殊父级的 XML 属性

javascript - 当我不再需要这个 `await nextEvent(element, ' mousemove')` 模式时,如何清理它?

c++ - 从字符串 vector 中删除特殊字符 C++

c# - Lambda 分配局部变量

C++ 调用模板函数错误

python - 禁用的 qtablewidgetitem 不会显示为灰色

c++ - 为什么选择 BSTR 以及如何将其转换为 QString?

java - OkHttp:避免泄漏连接警告

android - ByteBuffer 不释放内存