前言: 在使用QList的时候,往往会对其进行清空操作,但是如果QList中存放的是指针( 指向使用new分配的对象 ),那么QList的clear()动作是否会触发delete? 正文: 结论:QList在clear的时候不
前言:
在使用QList的时候,往往会对其进行清空操作,但是如果QList中存放的是指针( 指向使用new分配的对象 ),那么QList的clear()动作是否会触发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()); //先对所有成员调用deleteMyList.clear(); //再清空列表