単一例(Singleton)
≪単一モード|Single Mode|emdw≫:クラスにインスタンスが1つしかないことを確認し、グローバル・アクセス・ポイントを提供します.これらのクラスには、スレッドプール、キャッシュ、ダイアログボックス、処理の好み設定、レジストリのオブジェクト、ログオブジェクト、プリンタ、グラフィックスカードなどのデバイスのドライバオブジェクトなどが含まれます.
要点:
1.単一のモードでは、プログラム内の1つのクラスに1つのインスタンスしかないことを確認します.
2.シングル・インスタンス・モードでは、このインスタンスにアクセスするグローバル・ポイントも提供されます.
3.パフォーマンスおよびリソースの制約を特定し、マルチスレッドの問題を解決するために適切なスキームを慎重に選択して、単一のデバイスを実装する
4.複数のクラス・ローダを使用すると、単一のインスタンスが失効し、複数のインスタンスが生成される可能性があります.
パフォーマンスがアプリケーションにとって重要でない場合:
常に急いで使用する場合は、インスタンス化を遅らせる必要はありません.
マルチスレッド
要点:
1.単一のモードでは、プログラム内の1つのクラスに1つのインスタンスしかないことを確認します.
2.シングル・インスタンス・モードでは、このインスタンスにアクセスするグローバル・ポイントも提供されます.
3.パフォーマンスおよびリソースの制約を特定し、マルチスレッドの問題を解決するために適切なスキームを慎重に選択して、単一のデバイスを実装する
4.複数のクラス・ローダを使用すると、単一のインスタンスが失効し、複数のインスタンスが生成される可能性があります.
パフォーマンスがアプリケーションにとって重要でない場合:
#include<iostream>
#include<stdlib.h>
using namespace std;
class Singleton{
private:
Singleton(){}
public:
static Singleton* singleton;
static Singleton* getInstance(){
if(singleton==NULL){
singleton = new Singleton;//
}
return singleton;
}
void fun(){
cout << "this is a singleton" << endl;
}
};
//
Singleton* Singleton::singleton = NULL;
int main(){
Singleton::getInstance()->fun();
}
常に急いで使用する場合は、インスタンス化を遅らせる必要はありません.
#include<iostream>
#include<stdlib.h>
using namespace std;
class Singleton{
private:
Singleton(){}
public:
static Singleton* singleton;
static Singleton* getInstance(){
return singleton;
}
void fun(){
cout << "this is a singleton" << endl;
}
};
// ,
Singleton* Singleton::singleton = new Singleton;
int main(){
Singleton::getInstance()->fun();
}
マルチスレッド
#include<iostream>
#include<auto_ptr.h>
using namespace std;
class Singleton{
private:
Singleton(){}
public:
static Singleton* getInstance(){
typedef auto_ptr<Singleton> singletonPtr;
static singletonPtr singleton;
if(singleton.get()==NULL){
singleton.reset(new Singleton);
}
return singleton.get();
}
void fun(){
cout << "this is a singleton" << endl;
}
};
int main()
{
Singleton::getInstance()->fun();
}