В ответ на ваш ответ: delete->this
- это чисто синтаксическая ошибка, и даже без ->
написание delete this
обычно является запахом кода.За исключением этого, то, что вы сделали, похоже, сработает, если, возможно, не будет настолько интуитивно понятным, как могло бы быть.
Однако выполнение действий в такой последовательности не всегда возможно.Например, вы можете не знать, что будет следующим Window
.Возможно, какое окно откроется следующим, зависит от ответа HTTP, который может занять некоторое время.
Общее решение состоит в том, чтобы вызвать Application.hold()
перед удалением Window
.Вызов .hold()
увеличивает счетчик использования GApplication
, так же как и при добавлении окна.Приложение закрывается, когда его счетчик использования равен нулю.Сказать, что его жизнь контролируется окнами, - это просто быстрый способ приблизительного объяснения этого (и, очевидно, имеет отношение только к GtkApplication
, а не к основанию GApplication
).Удаление окна уменьшает счетчик использования.
Итак, в этом случае вы теперь перейдете с счетчика использования от 2 до 1, а не от 1 до 0, поэтому удаление 1-го окна больше не приведет к закрытию приложения.,Затем, после того как вы добавите 2-е окно, как бы много позже это ни происходило, вызовите .release()
, чтобы удалить счетчик дополнительного использования, чтобы оставшиеся окна теперь снова полностью контролировали время жизни приложения.