Looks like you have a potential deadlock in your thread pool implementation.
mutex mut_worker;
mutex mut_pool;
thread1:
ThreadPool::destroy() {
std::lock_guard<std::mutex> lock(mut_pool);
// mut_pool is now locked.
thread2:
ThreadPool::WorkerThread::run(...) {
std::unique_lock<std::mutex> lock(mut_worker);
_conditionVariable.wait(lock, ...);
// mut_worker is now locked.
_pPool->onWorkerAvailable(...); // takes lock on mut_pool.
// thread2 is now blocked until thread1 unlocks mut_pool.
thread1:
std::lock_guard<std::mutex> lock(mut_worker);
// thread1 is now blocked until thread2 unlocks mut_worker.
At this point, there is a deadlock; neither thread can make progress.
I've only recently started seriously looking into multithreading so it's quite possible that I've misunderstood something, though.