EDIT: Voir la réponse de GWW, le problème était simplement de faire une copie illicite avec C :: Instance(). Et j'avais tort, l'erreur ne dépend pas de mutable.Objets Singleton avec des membres mutables
Les méthodes statiques sont-elles incompatibles avec les méthodes mutables? Voici une version simplifiée de mon code:
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();
l'erreur que je reçois (gcc 4.2) est
error: 'QMutex::QMutex(const QMutex&)' is private within this context
synthesized method 'C::C(const C&)' first required here //at C::Instance()
Si je supprime le « mutable » mot-clé cette erreur disparaît, mais de Bien sûr, je ne peux pas faire les méthodes qui verrouiller/déverrouiller _mutex const. Ecrire ma propre copie ctor ne change rien. Quelqu'un sait comment résoudre cela? NB ceci ressemble à this post mais c'est l'objectif-C et il y avait juste trop de code là-dedans qui ne semblait pas pertinent à la question.
EDIT: Je viens de réaliser que le problème, évidemment, est que le copieur de QMutex est privé. Mais je ne comprends pas pourquoi «mutable» devrait faire une différence ici, c'est-à-dire pourquoi il induit une copie.
'C c = C :: Instance();' va copier l'instance? Êtes-vous sûr que c'est ce que vous voulez faire? – GWW
@GWW Oh LOL vous avez raison! * blush * –
Donc la question se résume à: comment 'mutable' affecte la nature publique/privée du constructeur de copie généré par le compilateur? –