2015-06-17 8 views
1

Я хочу отправить как предопределенные, так и пользовательские QEvent в приложение Qt. Требуется ли выделение события в куче или я могу просто передать указатель на объект в стеке?Право собственности на QEvent

QKeyEvent stackevent(QEvent::KeyPress); 
QKeyEvent* heapevent = new QKeyEvent(QEvent::KeyPress); 

QEvent * event; 
event = &stackevent; //valid ?? 
event = heapevent; 
QCoreApplication()->notify(someobj, event); 
delete heapevent; //valid? or lost ownership? 

ответ

4

событие = & stackevent; // действительный?

Обычно это не безопасно, но в этом случае она действует, так как функция notify не вернется, до тех пор пока событие обрабатывается (или нет), кто-то (это означает, что stackevent будет «живым» в течение этого операция).

удалить heapevent; // действует? или потерял право собственности?

Yap, это действительно так, потому что обычно никто не должен содержать указатель на QEvent (и, конечно, удалить его), и, кстати, он уже обработан.

Ситуация значительно изменения при postEvent используется:

событие должно быть выделяется в куче с очереди после событий будет брать на себя ответственность за события и удалить его, как только она была размещена , Невозможно получить доступ к событию после его публикации.

Ну, я думаю, что более удобно использовать распределение стека в вашей ситуации и передавать указатель на него в случае возникновения каких-либо проблем (память автоматически будет выпущена).

+1

благодарит за чистый ответ. добро пожаловать в SO. Ждем ваших будущих ответов. – UmNyobe

Смежные вопросы