2016-04-16 10 views
0

だから、私はかなり深刻なC++、特にテンプレートを新しくしています。しかし、私はもっと深く掘り下げようとしています。私はカップルシングルトンが必要です(なぜこれらは時々悪いと考えられるのか分かります)。そして、それらを行う最も簡単な方法を考えていました。C++ 11シンプルシングルトンテンプレート関数...それとも...?

私はに落ち着い:私は「自動設定=シングルトン<コンフィグ>()」を呼び出すと構成を設定するときので、今、何かが明らかにこれで間違っていると私はそれを完全に欠けている

template <class T> 
T& Singleton() { 
    static T _instance; 
    return _instance; 
} 

後でコードの別の部分でもう一度やり直すと、値はデフォルト値になります。

私はちょうどわからない何がが間違っています。

私の理解はC++ 11であり、スタティックな初期化はスレッドセーフなので、もっと複雑なレシピは必要ありません。

テンプレートに渡されるすべてのクラスに対してテンプレートが基本的に 'Singleton <Foo>()'関数を作成し、その関数で静的インスタンスを作成するため、その後のSingleton()同じインスタンス。

そうでないことを除いて。だから私は何かが欠けている。なぜこのことが間違ったことを達成するための明らかかつ容易な方法でしょうか?私は何か簡単に欠けていると思っています。

注:私は気にしません実施シングルトンです。私は関数を使ってシングルトンにアクセスします。十分な私はいつも同じインスタンスを返します。私がそれをバイパスしてシングルトンを直接インスタンス化することは私には関係ありません(実際には役に立つかもしれません特定の状況において)。ですから、どこでもシングルインスタンスを作成する、重い手の標準的なシングルトンメソッドには向いていません。

答えて

1
template <class T> 
T& Singleton() { 
    static T _instance; 
    return _instance; 
} 

Singleton()は参照を返します。したがって、静的変数を変更することができます。すべては問題ありませんが、もしあなたがシングルトンを取得したら、変数は参照にもなります。そうでなければ参照を取ることができず、代わりにコピーを取るからです。

このようにしています:auto config = Singleton<Config>();どのようにconfigが参照ではないので、毎回異なるシングルトンを取得するように、コピーを作成するだけです。 configを参考に変更してください:auto& config = Singleton<Config>();

+0

Ah!私は明らかに、あまりにも多くの自動車を信頼していたのを見てください。ありがとう! –

関連する問題