2011-01-30 11 views

答えて

5

C++でSingleton patternを検索していると思います。ここにはimplementationとここにはlinux tutorialがあります。シングルトンパターンはC++で

+4

非常に良い実装ではありません。複数のスレッドの面で失敗します。 –

+4

シングルトンパターンを使うたびに、子猫が死ぬ。 –

+1

ジェフアトウッドがシングルトンのパターンを使うたびに、ユニコーンが死ぬ! –

2

シングルトンよりもMonoStateに近いと思います。

MonoStateは、すべてのオブジェクトが静的メンバー変数によって同じ状態を共有することによって機能します。インスタンスは異なりますが、インスタンスによって返されるデータは同じです。ここに簡単な実装があります:

class MonoStateSession { 
private: 
    static int _SessionId; 

public: 
    void SetSessionId(int newSessionId) { 
    //Put threading checks/locks here 
    _SessionId = newSessionId; 
    } 

    int GetSessionId() { 
    return _SessionId; 
    } 
} 

//Usage 
MonoStateSession session1 = new MonoStateSession(); 
session1.SetSessionId(123); 
MonoStateSession session2 = new MonoStateSession(); 
assert(session2.GetSessionId() == 123); 
1

いいえ...しかし、あなたはそれに近づくことができます。たとえば、あなたは、たとえば...すべてのインスタンスが同じ実際のオブジェクトの単なるクローンであるクラスを作成することができます。すべてのMyObjectインスタンスはまだ例えば、自身のアドレスで(個別のオブジェクトになります

struct TheRealObject 
{ 
    std::string s; 

    TheRealObject() { ... } 
    void foo(int x) { ... } 
    double bar(char y) { ... } 

    static TheRealObject& getInstance() 
    { 
     static TheRealObject trb; 
     return trb; 
    } 
}; 

struct MyObject 
{ 
    std::string& s; 

    MyObject() : s(TheRealObject::getInstance().s) {} 

    void foo(int x) { TheRealObject::getInstance().foo(x); } 
    double bar(char y) { return TheRealObject::getInstance().bar(y); } 
}; 

注意を)しかし、彼らはメソッドとデータメンバの両方のアクセスのために、TheRealObjectの唯一のインスタンスにトランポリンとして機能します。

なぜこのような不思議なことをしたいのですか?代わりにシングルトンを探しているだけかもしれません(上記のTheRealObjectのように)?

関連する問題