qlist的 qDeleteAll问题,其实这应该算c++的问题

houtinghua 2013-03-18 01:37:47
#include <QtCore/QCoreApplication>
#include <QList>
#include <QString>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

typedef struct _test
{
int id;
QString name;
QImage* img;
}Por_test;

QList<Por_test *> slist;
for (int i=0;i<100000;i++)
{
Por_test *s = new Por_test();
s->id = 1;
s->name = QString("hello World!");
s->img= new QImage(400,400.....//这里为指针
slist.append(s);
}
qDeleteAll(slist); 我的问题在这里,请问这句话能释放结构体内的img吗?
slist.clear();
return a.exec();
}
...全文
725 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
donwmufromdying 2013-05-15
  • 打赏
  • 举报
回复
引用 1 楼 jdwx1 的回复:
我看不光 QImage* img没被delete,就连Por_test *s = new Por_test();也没有被delete 你可以把结构体改为class,析构函数里qdebug()<<“delete”,看看Por_test到底delete没有。
Qlist里边的item被delete掉,img无法正确delete掉! 有个更简单的办法,用QSharedPointer,省去你delete.不过最好的办法是:
typedef struct _test
    {
        _test() : img(0) {}
        ~_test() { if (img) delete img;}
        int id;
        QString name;
        QImage* img;
    }Por_test;
这样在你qDeleteAll(slist);的时候,img也会被delete掉。 另外,struct就是class,你就直接用class吧
wylove08 2013-05-13
  • 打赏
  • 举报
回复
可以,这个函数的缺点是 delete,但没有 = NULL; 这一步,意思QList里的指针是野指针
彩阳 2013-03-19
  • 打赏
  • 举报
回复
可以,不信看看qDeleteAll的宏定义。
蜡笔小新啦 2013-03-19
  • 打赏
  • 举报
回复
这个问题似乎和qt没什么关系吧。 qDeleteAll可以delete掉结构体! 但是你应该在结构体里面增加一个析构函数去delete QImage啊。不然谁给你delete QImage呢?
WORSTBOYZYM 2013-03-18
  • 打赏
  • 举报
回复
结构体内的指针没有被delete
jdwx 2013-03-18
  • 打赏
  • 举报
回复
我看不光 QImage* img没被delete,就连Por_test *s = new Por_test();也没有被delete 你可以把结构体改为class,析构函数里qdebug()<<“delete”,看看Por_test到底delete没有。

16,224

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧