Qt | QList 的 removeAt、takeAt 的区别
前言
在使用 QList 时,需要进行删除某一项的操作,发现 QList 提供了两个移除的方法,一个是 removeAt(),一个是 takeAt()。我创建的是一个存放指针变量的 QList,需要实现两个功能,一个是移除并销毁 item,一个是移除但是不销毁 item。在选择这两个方法时就产生了疑问。于是查阅了官方帮助和网上资料做对比,总结一下这两个方法的区别。
官方解释
removeAt(i): 删除索引位置 i 的项。i 必须是列表中有效的索引位置(即 0 <= i < size())。
takeAt(i): 移除位于索引位置 i 的项并返回它。i 必须是列表中有效的索引位置(即 0 <= I < size())。如果不使用返回值,removeAt()更合适。
这里说明两个方法都是移除 QList 某一项的方法,不同的地方在于,removeAt()没有返回值,而 takeAt()会返回移除的项的值。
简单使用
用一个简单的例子说明一下这两个方法的区别:
这两个方法都移除了列表的第一项,不同的是,takeAt 方法可以返回移除项的值。
特殊使用
当 QList 中的类型为指针类型时(即每一项存入的都是一个动态创建的内存的指针),移除某一项时的操作:
如果 QList 为指向 T 类型项的指针数组,那么 QList 将项直接存储在指针数组中。
QList 只保存你传入的基本指针,而不去或者不能知道这些指针是被怎么创建的,在何处创建的。所以在移除一个指针项时,只是将这个指针从列表中移出,而指针所指向的内存并没有被释放。如果需要释放,那么需要自己手动进行释放。
这两个方法都不能实现移除但是不销毁 item,我们需要重新创建一个相同的 item 进行保存。
版权声明: 本文为 InfoQ 作者【YOLO.】的原创文章。
原文链接:【http://xie.infoq.cn/article/3d8c2632d09f9462a114246ae】。未经作者许可,禁止转载。
评论