当前位置 : 主页 > 编程语言 > java >

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

来源:互联网 收集:自由互联 发布时间:2022-09-29
前言: 在使用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()); //先对所有成员调用delete
MyList.clear(); //再清空列表

 

上一篇:[其他] Linux下如何动态加载动态库
下一篇:没有了
网友评论