删除矢量中的指针时出错
Error deleting a pointer in a vector
我在尝试删除由向量拥有的指针时遇到问题。在我的应用程序中,我有一个QListView,我根据指针向量存储新项目。这是声明:
private:
vector<QStandardItem *> item;
QStandardItemModel* model = new QStandardItemModel();
我简化了它,但它是一个类的属性。要添加新项目,我使用以下代码:
this->item.push_back(new QStandardItem());
for (unsigned long i = 0; i != this->item.size(); ++i) {
this->item[i]->setCheckable( true );
this->item[i]->setCheckState( Qt::Checked );
this->item[i]->setText( "Current " + QString::number(i) );
this->model->setItem( i, this->item[i] );
ui->listView->setModel( model );
}
这工作得很好。现在我正在尝试添加一个删除按钮,该按钮可删除 QListView 上的当前索引。这是我到目前为止编写的代码:
QModelIndex index = ui->listView->currentIndex();
int deleteIndex = index.row();
this->model->removeRow(deleteIndex);
delete this->item[deleteIndex];
this->item.erase(this->item.begin() + deleteIndex);
对于我在StackOverflow上搜索的内容,该行
delete this->item[deleteIndex];
应该可以工作,但是每次按下删除按钮时都会遇到应用程序崩溃。没有该行,按钮工作正常,问题是我没有解除分配该项目使用的内存。
编辑:我已经提出了一个与同一问题有关的问题。
[使用 Qt 和唯一指针时出错
现在我想知道我是否尝试删除指针两次,这就是我收到错误的原因。问题是我对 c++ 和 qt 的了解不是很高。
您实际上是第二次删除此索引中的QStandardItem
。事实上,正如你在以下摘自Qt文档中QStandardItemModel
函数setItem
将给定行和列的项目设置为项目。模型取得物料的所有权。如有必要,将增加行计数和列计数以适合项目。删除给定位置的上一项(如果有(。
QStandardItemModel
管理您将传递的任何QStandardItem
,因此您永远不应尝试删除这些内容。
根据经验,当您不确定时,请查看Qt文档,了解您传递QObject
的任何函数。如果它说它拥有所有权,那么永远不要删除它。
据
我所知,Qt通过父子关系管理对象的生命周期,并自动删除子对象。至少在我使用它时是这种情况。考虑到这一点,我认为这里不需要手动内存管理,因为该项目将被Qt删除。
相关文章:
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 将链表转换为指针数组时出错
- 尝试将指针与结构一起使用时出错
- 将类指针类型转换为键时出错
- 如果我在指针中使用 ++ 操作数,我的值就会出错
- 在 Clang 中使用指向成员的指针时出错
- 编译包含指向模板函数的指针的初始值设定项列表时,gcc 出错,但 clang 不出错
- 通过在迭代指针键映射上出错来捕获非确定性
- 调用指向成员函数的指针时出错
- 通过具有矢量基址的指针读取矢量元素时出错
- 尝试返回指向 Visual Studio 中的动态数组的指针时出错C++
- 将空间分配给整数指针时出错
- GNU 链接器:如果头文件中的指针被声明为 NULL 和/或 extern,则出错
- 尝试将结构指针传递给类时出错
- 我设计了一个类并创建了基指针,但是当我尝试通过基指针访问派生函数时,它会出错
- 非标准语法;使用 '&' 创建指向成员的指针错误,将成员函数分配给向量时出错
- 指向 2D 数组的指针出错
- 删除vector中的指针出错
- 在c++函数中使用指针出错
- 指向数组参数的双指针出错