Владение контролами
Окно удерживает контролы, переданные в add_control(). Контрол ссылается на
родителя через weak_ptr. Классы приложения обычно хранят свои shared-ссылки,
чтобы обновлять или повторно подключать контролы. remove_control() отсоединяет
контрол; при наличии другого shared-владельца он продолжает жить.
Панель — поверхность для рисования, а не контейнер дочерних контролов.
Встроенный window может владеть своими контролами. message и tray_icon —
отдельные вспомогательные объекты.
Избегайте циклов владения в callback. В частности, не захватывайте shared-указатель контрола в его собственный callback:
auto check = std::make_shared<wui::button>("Remember", [] {}, wui::button_view::checkbox);
check->set_callback([weak = std::weak_ptr<wui::button>(check)] {
if (auto control = weak.lock()) {
bool checked = control->turned();
// Apply checked to application state.
}
});
При захвате this или ссылок соответствующие объекты должны жить до снятия
подписки. Отпишитесь, остановите таймеры и дождитесь worker до уничтожения
захваченных данных. Храните диалоги до закрытия. См. потоки.