EDIT: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)を取得していますエラーが
error: 'QMutex::QMutex(const QMutex&)' is private within this context
synthesized method 'C::C(const C&)' first required here //at C::Instance()
私は「可変」キーワードを削除した場合、このエラーは消えるが、その後のですもちろん、_mutex constをロック/ロック解除するメソッドを作ることはできません。私自身のコピーを書くことは何も変わらない。誰でもこれを解決する方法を知っていますか?これはthis postと似ていますが、それは目的のCです。そこにはあまりにも多くのコードがあり、問題に関連していないようです。
編集:明らかに、QMutexのコピーctorはプライベートであるということは明らかです。しかし、なぜ私は「変更可能」がここで違いを生ずるのか、つまりそれがなぜコピーを誘導するのか理解できません。
'C c = C :: Instance();'インスタンスをコピーしますか?あなたはそれがあなたがしたいことだと確信していますか? – GWW
@GWWあなたは正しいですよ! * blush * –
質問は次のようになっています。「変更可能」は、コンパイラによって生成されたコピーコンストラクタのパブリック/プライベートな性質にどのように影響しますか? –