Qt list.clear() 它会破坏对象的吗?
Qt list.clear() does it destroy the object's?
假设我有以下列表:
QList<Type*> list;
list.add(new Type());
list.add(new Type());
list.add(new Type());
list.add(new Type());
list.add(new Type());
list.add(new Type());
如果我想清空列表,我可以调用list.clear()
它是否会自动删除每个指针,或者我是否必须做以下操作来防止内存泄漏:
foreach (Type* t, list) delete t;
list.clear();
不,它只是从列表中删除它们。你必须自己删除它。您可以在这里找到要确保的实现:
template <typename T>
Q_OUTOFLINE_TEMPLATE void QList<T>::clear()
{
*this = QList<T>();
}
,这里的文档说它只是从列表中删除它们,但它没有删除:
空白QList: clear ()
从列表中删除所有项。
如果您想删除它们,我建议使用以下算法:
void qDeleteAll(ForwardIterator begin, ForwardIterator end)
使用c++ delete操作符删除[begin, end)范围内的所有项。项目类型必须是指针类型(例如,QWidget *)。
的例子:
QList<Employee *> list;
list.append(new Employee("Blackpool", "Stephen"));
list.append(new Employee("Twist", "Oliver"));
qDeleteAll(list.begin(), list.end());
list.clear();
如果您希望它们自动销毁,那么您需要手动删除它们或在列表
std::unique_ptr<Type>
, QPointer<Type>
(如果Type
是QObject),…)
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 即使在 C++ 中的 fstream.clear() 之后,对象也没有被保存
- STL 容器调用的 Clear() 方法是否删除堆对象
- cin.clear() 不会重置 cin 对象
- Qt list.clear() 它会破坏对象的吗?
- QList clear函数调用是否清除存储在QList中的动态分配对象的内存?
- 在c++ STL容器对象上不调用clear()而导致内存泄漏