当前位置:网站首页>Qt 实现容器的DELETE的方式
Qt 实现容器的DELETE的方式
2022-07-07 09:10:00 【InfoQ】
前提摘要
在写界面时,避免不了多次重复的使用同一个类型,并且只需要使用一次,后续不再适用。在我们使用完一个容器时,或者需要清空一个容器时都需要逐一将其中的内容删除。如果在界面中直接写QCheckBox *box=new QCheckBox(this);而不进行delete,很容易造成内存泄漏的问题。 因此我们将它存储进vector中,我们可通过在析构函数里遍历将它全部删除,这样不仅可以简化我们的内存管理工作,减少内存泄露的风险。
vector 优点
- 他可以任意存储,具有不限量的优点。
- 再删除中间的某一个数据后,后续的数据会自动补齐,不会造成浪费。
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>()就可以了。
这个方法可以穿插在代码中,它不影响后面的使用。
总结
这两个方法不可同时使用,只能二者选其一,我在最初使用第二种方法的时候在析构函数里还存留这第一种方法。导致在关闭界面时一直报错并且找不到解决方法。这也是我在其中踩到的一个大坑。两种方法各有其的优点,可以根据自身情况进行选择使用。第一种适用于不需要在程序运行当中使用清空处理,第二种比较合适。
今天的更新到此结束,希望各位大佬批评指正!
边栏推荐
- Bookmarking - common website navigation for programmers
- Unity websocket server
- A case of compiling QT file qmake compiling script
- shardingsphere分库分表示例(逻辑表,真实表,绑定表,广播表,单表)
- PostgreSQL中的表复制
- From pornographic live broadcast to live broadcast E-commerce
- 自动化测试框架
- Array object sorting
- seata 1.3.0 四种模式解决分布式事务(AT、TCC、SAGA、XA)
- TDengine 社区问题双周精选 | 第二期
猜你喜欢
随机推荐
seata 1.3.0 四种模式解决分布式事务(AT、TCC、SAGA、XA)
uniapp 在onLaunch中跳轉頁面後,點擊事件失效解决方法
自动化测试框架
shardingsphere分库分表示例(逻辑表,真实表,绑定表,广播表,单表)
测试优惠券要怎么写测试用例?
Interprocess communication (IPC)
关于在云服务器上(这里用腾讯云)安装mysql8.0并使本地可以远程连接的方法
[untitled]
Vscode 尝试在目标目录创建文件时发生一个错误:拒绝访问【已解决】
VIM命令模式与输入模式切换
The eighth training assignment
Long list performance optimization scheme memo
2022.7.4DAY596
uniCloud
变量的解构赋值
从色情直播到直播电商
Deconstruction and assignment of variables
Use of dotween
[untitled]
uniapp 在onLaunch中跳转页面后,点击事件失效解决方法