Qt 实现容器的DELETE的方式

举报
咚咚隆地咚 发表于 2022/09/20 17:51:50 2022/09/20
【摘要】 在写界面时,避免不了多次重复的使用同一个类型,并且只需要使用一次,后续不再适用。在我们使用完一个容器时,或者需要清空一个容器时都需要逐一将其中的内容删除。如果在界面中直接写QCheckBox *box=new QCheckBox(this);而不进行delete,很容易造成内存泄漏的问题。 因此我们将它存储进vector中,我们可通过在析构函数里遍历将它全部删除,这样不仅可以简化我们的内存管...

在写界面时,避免不了多次重复的使用同一个类型,并且只需要使用一次,后续不再适用。在我们使用完一个容器时,或者需要清空一个容器时都需要逐一将其中的内容删除。如果在界面中直接写
QCheckBox *box=new QCheckBox(this);而不进行delete,很容易造成内存泄漏的问题。 因此我们将它存储进vector中,我们可通过在析构函数里遍历将它全部删除,这样不仅可以简化我们的内存管理工作,减少内存泄露的风险。

vector 优点

  1. 他可以任意存储,具有不限量的优点。
  2. 再删除中间的某一个数据后,后续的数据会自动补齐,不会造成浪费。

delete 容器的方法一:

for (std::vector<QCheckBox*>::iterator itvet = m_vetAddCheckBoxControls.begin(); itvet != m_vetAddCheckBoxControls.end(); itvet++)
{
            if(*itvet)
            {
                delete  *itvet;
                *itvet = nullptr;
            }

        }
    m_vetAddCheckBoxControls.clear();

最传统的方法,可以再析构函数中这样做,它通过遍历的方式,将容器中的每一项数据都删除,最后以防万一,将容器clear()。

delete 容器的方法二:

vector<QCheckBox*>().swap(m_vetAddCheckBoxControls);

这个方法不仅适用于vector,同样也适用于QMAp,只需要将vector<QCheckBox*>()替换成QMap<QCheckBox*,bool>()就可以了。

这个方法可以穿插在代码中,它不影响后面的使用。

总结

这两个方法不可同时使用,只能二者选其一,我在最初使用第二种方法的时候在析构函数里还存留这第一种方法。导致在关闭界面时一直报错并且找不到解决方法。这也是我在其中踩到的一个大坑。
两种方法各有其的优点,可以根据自身情况进行选择使用。第一种适用于不需要在程序运行当中使用清空处理,第二种比较合适。

今天的更新到此结束,希望各位大佬批评指正!

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。