• 8331阅读
  • 3回复

new 一个 event , postevent 后,这个event会被Qt自动删除吗? [复制链接]

上一主题 下一主题
离线amaorn
 

只看楼主 倒序阅读 楼主  发表于: 2008-09-01
— 本帖被 XChinux 执行加亮操作(2008-09-03) —
#include "lablebug.h"

#include <QString>
#include <QEvent>
#include <QObject>
#include <QCoreApplication>
#include <Windows.h>


lableBug::lableBug(QWidget *parent)
    : QLabel(parent)
{
    this->resize( 200,100 );
}

void lableBug::startTest()
{
    int i = 1;
    while( 1 )
    {
        i++;
        QEvent *timeEvent = new QEvent(QEvent::User);
        int i = timeEvent->registerEventType();
        //Note: This function is thread-safe,returns immediately.
        QCoreApplication::postEvent( this, timeEvent );
    }
}

void lableBug::customEvent( QEvent * event  )
{
    int i = 0;
}

bool lableBug::event(QEvent *e)
{
    if( e->type() == QEvent::User )
    {
    }

    return true;
}

为什么我发现内存不断的长了?


离线fanzhichao

只看该作者 1楼 发表于: 2008-09-01
new是在堆内存上分配空间,必须用delete显示删除。
直接构造一个对象不行嘛,何必用指针呢?
离线amaorn

只看该作者 2楼 发表于: 2008-09-01
如果是局部变量,在函数结束就销毁了,接受事件的函数就得到野指针...
你去看看Qt文档,上面写了QT内部有个消息队列管理异步发出的消息,QT维护这个队列,会自己删除....
但是我测试下,发现没有删除event,这难道是QT的BUG?
离线happyant
只看该作者 3楼 发表于: 2008-09-01
QT可以不显式地delete new出来的指针,但是何时删除,应该分析你的作用域吧~~
我觉得,你自己定义的labBug类~如果是在main函数中使用~那么应该在 return app.exec()执行时,你的指针才会删除~~~~~~~~~~~~所以内存会长?
int i = timeEvent->registerEventType(); 这句,int i有什么用?
快速回复
限100 字节
 
上一个 下一个