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