Название: Лямбда-слоты ведут себя странно (Решено) Отправлено: xokc от Декабрь 07, 2015, 22:46 Имею GUI приложение со следующим кодом:
Код
При завершении программы сначала отрабатывает деструктор DBModel, потом в процессе отработки других деструкторов срабатывает сигнал ChannelsModel::channelDeleted. Ожидаемое поведение - слот не должен вызваться, так как DBModel к этому моменту уже убито. Однако, в консоли получаю... ~DBModel deleted 0 и закономерный креш по факту обращения с убитым уже this. При этом, если меняю лямбда слот на "обычный": Код то всё в порядке, в консоли только ~DBModel, что вполне ожидаемо. Чтобы это значило? Лямбда слоты коннектятся как-то по особенному? Название: Re: Лямбда-слоты ведут себя странно Отправлено: Fat-Zer от Декабрь 07, 2015, 23:28 Не лямбда-слоты коннектятся по-особому, а все функции-слоты такие... в данном случае DBModel не имеет к соединению ни какого отношения...
Надо задать контекст (использовать другой вызов connect() ): Код: connect(chModel, &ChannelsModel::channelDeleted, this, [=](int index) { Название: Re: Лямбда-слоты ведут себя странно (Решено) Отправлено: xokc от Декабрь 08, 2015, 15:50 Ну конечно, this то пропустил! Спасибо.
|