21,470
社区成员
发帖
与我相关
我的任务
分享
std::unique_ptr<QHash<QString, std::unique_ptr<Settings> > > StList;
或std::shared_ptr
不支援shared_ptr或unique_ptr,Qt自己也有提供smart pointer
如果你对smart pointer有疑问,可以另外选个帖子发问
楼主大概没读过meyers的effective series?对于要用c++开发案子的人来说
阅读meyers的书会有很大的帮助,如果你还没读过
请快点跑去书店买回来啃,不是走去买,是跑去买
#include <QtCore>
#include <QtGui>
void memory_alloc_release()
{
QHash<QString,QHash<QString,QHash<QString,QString> > > Options;
for(int i=0;i<10;i++)
{
QHash<QString,QHash<QString,QString> > Tmp2;
for(int m=0;m<1000;m++)
{
QHash<QString,QString> Tmp1;
Tmp1.insert(QString::number(m),QString::number(m));
Tmp2.insert(QString::number(m),Tmp1);
}
Options.insert(QString::number(i),Tmp2);
}
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
while(1){
memory_alloc_release();
}
QLabel w;
w.show();
return a.exec();
}
我的环境下,memory一直在5M~7.XM下变化
memory确实有不断的回收和释放
smart pointer的使用不难
快点掌握他吧,处理上层逻辑的时候
smart pointer会帮你省下很多时间的
至少你以后除错的时候不用再担心有哪里
忘了release resource
我以前用C的时候总是得将忘了release这个
可能性纳入计算,用了smart pointer后我再也不曾
为了这问题而烦恼了
竟然是英文的Form,这个,英文水平有限啊,看看还可以,说就............
我也不知道发生了什么事情...可能是QHash用pool管理resource
所以resource暂时没有被释放?
我用的版本是Qt4.8.4,win764bits, mingw4.6.2
到这里去问问题吧,说不定是Qt4.8.1的bug?
http://qt-project.org/forums/
确定是bug而且Qt4.8.4也有一样的问题后可以到这里报告
https://bugreports.qt-project.org/secure/IssueNavigator.jspa?pager/start=50if(1)
{
QHash<QString,QHash<QString,QHash<QString,QString> > > Options;
for(int i=0;i<10;i++)
{
QHash<QString,QHash<QString,QString> > Tmp2;
for(int m=0;m<1000;m++)
{
QHash<QString,QString> Tmp1;
Tmp1.insert(QString::number(m),QString::number(m));
Tmp2.insert(QString::number(m),Tmp1);
}
Options.insert(QString::number(i),Tmp2);
}
}
return App.exec();


有关于这几个问题,
1.ReleaseResource这里,我确认都被正确调用了;
2.那个例子,就是QHash嵌套的例子,没有这些方法,只是简单的利用QHash,在我这里的试验确实是不释放内存,这个不牵涉我自定义的数据结构,我用的4.8.1的库,Qt Creator 2.4.1,UBuntu 12.04LTS版本,是不是我的环境配置有问题呢?