2017-03-18 21 views
2

シングルトンはオブジェクトのインスタンスを1つだけ許可することが分かります。シングルトンで宣言された各メソッドは、このオブジェクトに対してのみ動作します。 同じ目標を達成するグローバルオブジェクトを単に宣言していないのはなぜだろうか?シングルトンとグローバル変数の相違

私は確かに何かを忘れています。シングルトンが存在する場合は、特定のメカニズムを実現するために特定の用途や支援が必要です。例えば

class Singleton 
{ 
public: 
    static Singleton& Instance() 
    { 
     static Singleton sg; 
     return sg; 
    } 

    void function(); 
}; 

は同じのようになります。

class NotSingleton 
{ 
public: 
    NotSingleon(); 
    ~NotSingleton() 
    void function(); 
}; 
NotSingleton nsg; 

しかし、何もNotSingleton

+0

SOユーザは覚えていませんが、誰かがマルチスレッド環境で安全だと言いました。 – Papipone

+2

また、グローバル変数を使用する場合は、プログラムの開始時にこのオブジェクトを初期化する必要があります。シングルトンを使用する場合は、初めて使用する時間までシングルトンを作成できます。 極端な状況では、プログラムが終了するまで使用する必要はないので、シングルトンをまったく作成する必要はありません。したがって、Singletonを使用すると、必要なときにのみ作成することができます。 第2に、マルチスレッドプログラムでグローバル変数に直接アクセスすると、デバッグが困難な問題が発生する可能性があります。 – Jiahao

答えて

4

の複数のインスタンスを使用するように私を防ぐないシングルトンをするときに使用されます複数のオブジェクトを作成する必要はありません。シングルトンクラスは、複数のオブジェクトが作成されないようにします。しかし、グローバルオブジェクトを持っていても、これを保証するわけではありません。

Class Singleton{ 
public static Singleton object==null; 



    public void singleton(){ 
    if(object==null) 
     object = new Singleton(); 
    return object; 
    } 

    } 

このクラスは、複数のオブジェクトを作成しません。これがSingletonクラスの目的です。

+0

シングルトンパターンの本来の目的については、あなたは絶対に正しいです。しかし、私が見たコードの大部分では、実際にはグローバル変数の代わりに使用されています。 –

+0

おそらくプロプルがその概念に精通していないからです。 –

関連する問題