а что будет если сделать так?
C++ (Qt)
QObject *obj =new QObject();
delete obj;
delete obj;
Вот то же самое будет и в том примере.
Проверим
C++ (Qt)
#include <QtGui>
struct MyObj : public QObject {
virtual ~MyObj( void )
{
qDebug() << "destroy";
}
};
int main(int argc, char **argv)
{
QApplication app(argc, argv);
MyObj * obj = new MyObj();
obj->deleteLater();
delete obj;
app.exec();
return 0;
}
У меня "destroy" печатается один раз.
Как евентлуп получив сообщение, что нужно удалить объект узнает, что он уже был удален?
Он его просто не получит т.к. деструктор вызовет removePostedEvents (см. исходники)
это бессмысленно.
Просто первые 2 строчки в одном куске кода. 2 последние в другом - и как минимум непросто отследить порядок вызовов
C++ (Qt)
QObject *obj = new QObject(this);
obj->deleteLater();
...
C++ (Qt)
delete obj;
obj=new QObject(this);
...