Qt: хорошо в классе c ++ иметь поле виджета, не объявленное как указатель - PullRequest
2 голосов
/ 09 декабря 2011
class Foo : public QMainWindow
{
    MyWidget  *alertDlg_; 
    MyWidget   alertDlg2_; 
};

Может ли второе поле быть опасным?

Спасибо

EDIT: пример проблемы:

{
    QPushButton button("button"); 
    QWidget widget;
    button.setParent(&widget);
} // crash 

1 Ответ

2 голосов
/ 09 декабря 2011

Да, поскольку у Qt есть собственное управление памятью, и если у alertDlg2_ есть родитель, вы получите двойное удаление.

Подробнее о деревьях объектов qt и их праве собственности можно узнать в этой статье . Вы можете видеть, что делать то, что вы делали в отредактированном примере, небезопасно. Вот почему вы получаете аварии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...