如何删除QVector中指定指针元素且不缩减向量大小?
解决QVector删除对象但不缩减大小的问题
你遇到的核心问题是误用了takeAt()函数——这个函数会移除指定索引的元素,并将后续元素向前移动,同时缩减向量的大小。要实现删除对象但保持向量大小、不移动其他元素的需求,只需要直接操作目标索引的指针即可:
- 获取目标索引的指针
- 调用
delete释放内存 - 将该索引位置重新设为
nullptr
修正后的示例代码
#include <QVector> #include <QDebug> int main() { // 创建大小为20、元素均为nullptr的QVector QVector<int*> exVector(20, nullptr); // 输出20,初始大小正确 qDebug() << exVector.size(); // 为索引2分配新对象 int* num1 = new int(4); exVector[2] = num1; // 正确删除对象并保持向量大小 int* numToDel = exVector[2]; // 直接获取指针,不移除元素 delete numToDel; // 释放内存 exVector[2] = nullptr; // 重置为nullptr,避免野指针 // 输出20,大小未改变 qDebug() << exVector.size(); }
关键说明
- 直接通过
exVector[2]访问指针,不会改变向量的结构,其他元素位置完全不变 - 必须将该位置重置为
nullptr,防止后续误操作野指针 - 避免使用
takeAt()、removeAt()这类会修改向量大小或移动元素的函数
内容的提问来源于stack exchange,提问作者kaan kaya
相关产品推荐
相关产品推荐

