2011-10-28 8 views
0

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はプライベートであるということは明らかです。しかし、なぜ私は「変更可能」がここで違いを生ずるのか、つまりそれがなぜコピーを誘導するのか理解できません。

+0

'C c = C :: Instance();'インスタンスをコピーしますか?あなたはそれがあなたがしたいことだと確信していますか? – GWW

+0

@GWWあなたは正しいですよ! * blush * –

+0

質問は次のようになっています。「変更可能」は、コンパイラによって生成されたコピーコンストラクタのパブリック/プライベートな性質にどのように影響しますか? –

答えて

3

シングルトンをコピーしようとしていますが、コピーコンストラクタをprivateに宣言しているため失敗します。変更可能なメンバーとはまったく関係ありません。

+2

'C&c = C :: Instance();'はおそらくそれを修正します – GWW

関連する問題