Глядя на код деструктора unique_lock из Boost 1.42:
~unique_lock()
{
if(owns_lock())
{
m->unlock();
}
}
Он будет пытаться разыменовать свой указатель на ваш (теперь недействительный) мьютекс, если он владеет блокировкой.Если вы уже вызывали unlock для этого scoped_lock, то это не должно вызывать проблем в этой реализации (которые, хотя и маловероятно, могут измениться в будущих версиях библиотеки).
Однако рекомендуется обеспечитьВаши объекты уничтожаются в таком порядке, что зависимые объекты уничтожаются до их зависимости.Если вы не можете гарантировать это, то, как вы правильно сказали, вы должны вызвать release () для блокировки перед уничтожением мьютекса.