Имею GUI приложение со следующим кодом:
C++ (Qt)
DBModel::DBModel(QObject *parent) : QSqlQueryModel(parent)
{
connect(chModel, &ChannelsModel::channelDeleted, [=](int index) {
qDebug() << "deleted" << index;
});
}
DBModel::~DBModel()
{
qDebug() << "~DBModel";
}
При завершении программы сначала отрабатывает деструктор DBModel, потом в процессе отработки других деструкторов срабатывает сигнал ChannelsModel::channelDeleted. Ожидаемое поведение - слот не должен вызваться, так как DBModel к этому моменту уже убито. Однако, в консоли получаю...
~DBModel
deleted 0
и закономерный креш по факту обращения с убитым уже this.
При этом, если меняю лямбда слот на "обычный":
C++ (Qt)
connect(chModel, &ChannelsModel::channelDeleted, this, &DBModel::delch);
то всё в порядке, в консоли только ~DBModel, что вполне ожидаемо. Чтобы это значило? Лямбда слоты коннектятся как-то по особенному?