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

前言:

在使用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());        //先对所有成员调用delete
MyList.clear();                                 //再清空列表

猜你喜欢

转载自blog.csdn.net/ykun089/article/details/107533073