У меня есть потокобезопасный класс Document
, представляющий пользовательский документ.
У этого есть геттеры (функции const) и сеттеры, чтобы изменить его состояние.
Все эти функции защищены мьютексом, чтобы гарантировать, что документ не будет изменен
пока метод не будет полностью выполнен.
Но из-за использования QMutex
я не могу отметить функцию, доступную для состояния
как const
без использования mutable
. Захват QMutex
изменит его состояние.
Правильно ли этот код, или он может быть написан более приятным образом?
Без использования hacky mutable
.
class Document
{
// This method should be const: it changes only mutex
// and don't touch document state
bool IsCorrect() const;
...
mutable QMutex m_lock;
};
bool Document::IsCorrect() const
{
// Capturing mutex object change it!
QMutexLocker lock( &m_lock );
... Const-aware code
bool result = ( m_context != NULL );
...
return result;
}