意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

[Qt] QList中存放指针时是否会自动delete指针指向的对象

来源:恒创科技 编辑:恒创科技编辑部
2024-01-29 05:41:59


前言:

在使用QList的时候,往往会对其进行清空操作,但是如果QList中存放的是指针( 指向使用new分配的对象 ),那么QList的clear()动作是否会触发delete?


[Qt] QList中存放指针时是否会自动delete指针指向的对象

正文:

结论:QList在clear的时候不会delete其中的指针成员。

QList清空元素的方法为clear(),其源码为:

template <typename T>
Q_OUTOFLINE_TEMPLATE void QList<T>::clear()
{
*this = QList<T>();
}

可见,其只是将当前列表内的数据替换为一个空的QList,因此不会调用delete。

那么在清空QList的时候,特别是QList里的内容是一系列指针时,需要先挨个析构QList中的所有内容,再清空QList。

有两种方式:

1)创建迭代器,挨个delete,然后调用clear();

2)使用void qDeleteAll(ForwardIterator begin, ForwardIterator end),然后调用clear()。

ps:

1)qDeleteAll 其实就是对迭代 delete 的封装,这个动作不会改变列表的内容。

2)qDeleteAll可以用在所有容器上。

代码示例:
qDeleteAll(MyList.begin(),MyList.end());        //先对所有成员调用delete
MyList.clear(); //再清空列表

上一篇: [其他] Linux下如何动态加载动态库 下一篇: 手机怎么远程登录云服务器?