У меня есть потокобезопасный класс 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;
}