Ваш код многопоточности выглядит хорошо.Единственное, что пахнет - это смешивание lock_guard
и unique_lock
, но это не имеет большого значения.Однако я на 99% уверен, что ваш код падает не там, где вы указали, а в следующей строке - q->execute();
.Кажется, что вызывающий метод Database::Execute ()
передает указатель на объект запроса, который расположен в стеке, или, если он размещен динамически, он удаляет его сразу после завершения функции.Позже, однако, ваш поток повторяет указатель на этот удаленный (освобожденный или разрушенный) объект и пытается выполнить его.Другая возможность состоит в том, что указатель NULL передается в Database::Execute ()
, что приводит к тому же результату.