РЕДАКТИРОВАТЬ: см. Ответ GWW, проблема заключалась в том, чтобы просто сделать незаконную копию с C :: Instance (). И я ошибся, ошибка не зависит от изменчивости.
Являются ли статические методы несовместимыми с изменяемыми методами? Вот упрощенная версия моего кода:
c.h:
class C
{
public:
static C& Instance();
private:
C();
mutable QMutex _mutex;
};
c.cpp:
C& C::Instance()
{
static C instance;
return instance;
}
C c = C::Instance();
Тогда я получаю ошибку (gcc 4.2):
ошибка: 'QMutex :: QMutex (const QMutex &)' является конфиденциальной в этом контексте
Синтезированный метод 'C :: C (const C &)' сначала требуется здесь // в C :: Instance ()
Если я удалю ключевое слово 'mutable', эта ошибка исчезнет, но, конечно, я не смогу сделать методы, которые блокируют / разблокируют _mutex const. Написание собственной копии ctor ничего не меняет. Кто-нибудь знает, как это решить? Примечание: это похоже на этот пост , но это цель-C, и там было слишком много кода, который, казалось, не относился к вопросу.
РЕДАКТИРОВАТЬ: Только что понял, что проблема, очевидно, в том, что копирующий ctor QMutex является частным. Но я не понимаю, почему «изменчивый» должен иметь значение здесь, то есть, почему он вызывает копию.