3

この質問にはすでに答えがあります。

シングルトンはオブジェクトのインスタンスを1つだけ許可することを私は知っています。シングルトンで宣言された各メソッドは、このオブジェクトに対してのみ機能します。 同じ目的を達成するグローバルオブジェクトを単に宣言しないのはなぜだろうか。

私は確かに何かを忘れています。シングルトンが存在する場合、特定の用途があるか、特定のメカニズムを実現するのに役立つはずです。

例えば:

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

    void function();
};

と同じになります。

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

しかし、私が複数のインスタンスを使うことを妨げるものは何もありません。NotSingleton


  • SOユーザーを覚えていないが、誰かがマルチスレッドのコンテキストで安全であると私に言った。 - Papipone
  • また、グローバル変数を使用する場合は、プログラムの起動時にこのオブジェクトを初期化する必要があります。あなたがシングルトンを使用するなら、あなたはあなたが初めてそれを使うつもりである時までそれを作成することができます。極端な状況では、プログラムが終了するまで使用する必要はないので、シングルトンを作成する必要はまったくありません。そのため、シングルトンを使用すると、必要なときにだけ作成できます。第二に、マルチスレッドプログラムでは、グローバル変数に直接アクセスするだけでは、デバッグが困難な問題が発生する可能性があります。 - Jiahao

1 답변


3

シングルトンは、複数のオブジェクトを作成したくない場合に使用されます。シングルトンクラスは、複数のオブジェクトが作成されないようにします。しかし、グローバルオブジェクトを持つことでこれを保証することはできません。

Class Singleton{
public static Singleton object==null;



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

    }

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


  • あなたはシングルトンパターンの本来の目的については絶対に正しいです。しかし、私が見たほとんどのコードでは、実際にはグローバル変数の代わりとして使われています。 - Frank Puffer
  • おそらくpropleはその概念に精通していないからでしょう。 - Usama Alvi
  • これは間違っています。あなたの実装が常に1つのインスタンスが存在することを保証することを確信していますか? - kadina

リンクされた質問


関連する質問

最近の質問